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 값을 각각 따로 받아 값을 받아 최적화를 진행했다.
'Koala - 15기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/C++] 15988번: 1, 2, 3 더하기 3 (0) | 2024.07.06 |
---|---|
[백준/Python] 2561 세 번 뒤집기 (0) | 2024.07.06 |
[BOJ/Java] - 흩날리는 시험지 속에서 내 평점이 느껴진거야 (0) | 2024.07.04 |
[백준/Python] #17127 벚꽃이 정보섬에 피어난 이유 (0) | 2024.07.04 |
15기 코딩테스트 준비 스터디 출석부 (0) | 2024.07.03 |