Koala - 15기/코딩테스트 준비 스터디

[백준/Python3] 2529번: 부등호

יוֹסֵף 2024. 7. 4. 14:50

https://www.acmicpc.net/problem/2529

 

 

 

문제

 

풀이

import sys
import itertools

def check(array, ptr):
    global n
    for i in range(n):
        if array[i] == '>' and not ptr[i] > ptr[i + 1]:
            return False
        elif array[i] == '<' and not ptr[i] < ptr[i + 1]:
            return False
    return True

num = [str(x) for x in range(10)]
n = int(sys.stdin.readline())
array = list(map(str, sys.stdin.readline().split()))


max_ptr = None
min_ptr = None
for i in (itertools.permutations(num, n + 1)):
    if check(array, i):
        min_ptr = i
        break

for perm in itertools.permutations(reversed(num), n + 1):
    if check(array, perm):
        max_ptr = perm
        break
print(''.join(max_ptr))
print(''.join(min_ptr))

 

모든 조합의 경우를 check라는 검증 함수를 통해 필요한 부분만 값을 받아올 수 있도록 작성했다. 역순 순열을 통해 모든 순회를 통해 검증하는 것이 아닌 Max 값과 min 값을 각각 따로 받아 값을 받아 최적화를 진행했다.