https://www.acmicpc.net/problem/2529
2529번: 부등호
여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력
www.acmicpc.net
'''
2529번: 부등호 / silver 1 / 백트래킹, 브루트포스
'''
def dfs(num, depth):
# 종료조건
if depth == k:
all_case.append(num)
return
if inequality[depth] == '>':
for i in range(10):
if i in remain and int(num[-1]) > i:
remain.remove(i)
dfs(num + str(i), depth + 1)
remain.add(i)
if inequality[depth] == '<':
for i in range(10):
if i in remain and int(num[-1]) < i:
remain.remove(i)
dfs(num + str(i), depth + 1)
remain.add(i)
# 부등호 개수 k, 부등호 inequality 입력받기
k = int(input())
inequality = list(map(str, input().split()))
# 모든 가능한 숫자 구하기
all_case = []
for v in range(10):
remain = set(i for i in range(10))
remain.remove(v)
dfs(str(v), 0)
# 최대값, 최소값 출력
print(all_case[-1])
print(all_case[0])
코드 리뷰
- 해당 문제를 푸는데 약 50분 정도 소요가 됐습니다.
어려웠던 부분
- remain 세트 활용하기 : 선택된 숫자는 remain 세트에서 삭제하며, dfs 로 다시 돌아오면 다시 remain 세트에 추가합니다.
'백준 문제풀이' 카테고리의 다른 글
20055번: 컨베이어 벨트 위의 로봇 / gold 5 / 시뮬레이션 (0) | 2023.05.05 |
---|---|
17135번: 캐슬 디펜스 / gold 3 / 조합, copy, 시뮬레이션 (0) | 2023.05.04 |
16639번: 괄호 추가하기 3 / gold 1 / DP (0) | 2023.05.02 |
7785번: 회사에 있는 사람 / silver 5 / 구현 (0) | 2023.04.29 |
16637번: 괄호 추가하기 / gold 3 / 브루트포스 (0) | 2023.04.28 |