오늘은 여기까지
[백준] 부등호 - Python 파이썬 본문
사용개념: 브루트포스, 완전탐색
1. 완전 탐색이 가능한지?
K는 최대 9이므로 최악의 경우 숫자를 뽑는 경우의 수가 10!(=3628800)개 생긴다. 이는 시간 제한 안에 충분히 탐색 가능하다.
2. 전체 코드
from itertools import permutations
k = int(input())
signs = list(input().split())
number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers = list(permutations(number, k+1))
def check(num):
flag = True
for i in range(k):
sign = signs.pop(0)
if sign == "<":
if num[i] > num[i+1]:
flag = False
else:
if num[i] < num[i+1]:
flag = False
signs.append(sign)
return flag
for num in reversed(numbers):
if check(num):
print(''.join(map(str, num)))
break
for num in numbers:
if check(num):
print(''.join(map(str, num)))
break
3. DFS
10개의 숫자를 부등호 조건에 맞게 조합하는게 0~9를 방문처리하면서 dfs를 돌릴 수 있을 것 같았다.
`방문처리` → `재귀` → `방문처리 해제`를 해줄 것.
더보기
더보기
def check(a, b, sign):
if sign == "<":
if not a < b: return False
if sign == ">":
if not a > b: return False
return True
def dfs(cnt, number):
if cnt == k+1:
answer.append(number)
return
for i in range(10):
if visited[i]: continue
if cnt == 0 or check(number[cnt-1], str(i), signs[cnt-1]):
visited[i] = 1
dfs(cnt+1, number+str(i))
visited[i] = 0
k = int(input())
signs = list(input().split())
visited = [0] * 10
answer = []
dfs(0, '')
answer.sort()
print(answer[-1])
print(answer[0])
'Problem Solving' 카테고리의 다른 글
[백준] 자리배정 - Python 파이썬 (0) | 2024.10.15 |
---|---|
[백준/19941] 햄버거 분배 - Python 파이썬 (1) | 2024.10.15 |
[백준/14247] 나무 자르기 - Python 파이썬 (0) | 2024.10.11 |
[백준] 숫자판 점프 - 파이썬 Python (0) | 2024.10.09 |
[백준] 부분수열의 합 - 파이썬 Python (1) | 2024.10.08 |