흙금이네 블로그

[BOJ] 19582 - 200년간 폐관수련했더니 PS 최강자가 된 건에 대하여 (Python, JavaScript) 본문

알고리즘

[BOJ] 19582 - 200년간 폐관수련했더니 PS 최강자가 된 건에 대하여 (Python, JavaScript)

흙금 2023. 5. 9. 01:22

 

 

아이디어

 

그리디 알고리즘으로 참가할 수 없는 대회가 1개 이하인지 확인한다.

 

 

풀이 #1 (Python)

 

total에는 현재까지 모은 상금 합을 저장하고, max_p에는 현재까지의 상금 최댓값을 저장한다.

상금 합이 상금 상한을 넘기면 flag 값을 1로 저장하고 상금이 max_p인 대회에 참가하지 않았던 것으로 한다.

만약 max_p를 뺀 상금 합이 상금 상한을 넘기면 flag 값을 2로 저장하고 해당 대회에 참가하지 않은 것으로 한다.

 

두 번 이상 상금 상한을 넘기면 flag 값이 1이면서 max_p를 뺀 상금 합도 상한을 넘기는 경우나

flag 값이 2인 경우 참가할 수 없는 대회 수가 2개 이상이 된다.

 

import sys

input = sys.stdin.readline

def solution():
    N = int(input())
    total = max_p = flag = 0
    for _ in range(N):
        x, p = map(int, input().split())
        if total > x:
            if flag == 2 or flag and total-max_p > x:
                print('Zzz')
                return
            if total-max_p > x:
                flag = 2
                continue
            flag = 1
        total += p
        if p > max_p:
            max_p = p
    print('Kkeo-eok')

solution()

 

 

 

풀이 #2 (JavaScript)

 

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');

function solution() {
    const N = Number(input[0]);
    let total = maxP = flag = 0;
    for (let i=1; i<=N; i++) {
        const [x, p] = input[i].split(' ').map(Number);
        if (total > x) {
            if (flag == 2 || flag && total-maxP > x) {
                console.log('Zzz');
                return;
            }
            if (total-maxP > x) {
                flag = 2;
                continue;
            }
            flag = 1;
        }
        total += p;
        if (p > maxP) maxP = p;
    }
    console.log('Kkeo-eok');
}

solution();

 

Comments