꿈꾸는 개발자의 devLog
[BaekJoon] "완전탐색" - 백준 18511번 문제 : 큰 수 구성하기 본문
반응형
[문제 설명]
https://www.acmicpc.net/problem/18511
18511번: 큰 수 구성하기
첫째 줄에 N, K의 원소의 개수가 공백을 기준으로 구분되어 자연수로 주어진다. (10 ≤ N ≤ 100,000,000, 1 ≤ K의 원소의 개수 ≤ 3) 둘째 줄에 K의 원소들이 공백을 기준으로 구분되어 주어진다. 각
www.acmicpc.net
N보다 작거나 같은 자연수 중에서, 집합 K의 원소로만 구성된 가장 큰 수를 출력하는 프로그램 작성
N = 657이고, K={1,5,7}일 때 답은 577임
[해결 로직]
- DFS 재귀 방법으로 풀이하였음
- 먼저 첫번째 원소부터 재귀를 시작
- 1 다음에 1을 붙여주고, 다시 재귀로 들어갔다가 1 붙여주고,
- 만약 조건에 안맞으면 재귀 탈출, 그리고 1 붙인거를 pop.해줌
- 이게 같은 숫자가 들어가줘도 되니깐 안에서 주어진 k 배열에 대해 재귀를 계속 도는 거임
- 만들어진 숫자가 N보다 작고, 현재까지 만든 숫자중에 제일 크다면 탈출
[Solution 코드]
n, k = map(int, input().split())
ary = list(map(int, input().split()))
max_sum = -999999
n_lnt = len(str(n))
def dfs(ary, sol):
global max_sum
#print(sol)
if len(sol) > n_lnt:
return
if len(sol) > 0:
num_str = int(''.join(map(str, sol)))
if (num_str <= n) & (num_str >= max_sum):
max_sum = num_str
for i in range(k):
sol.append(ary[i])
dfs(ary, sol)
sol.pop()
# numbers = [1, 2, 3]
# string_numbers = ''.join(str(num) for num in numbers)
# print(string_numbers) # 결과: "123"
dfs(ary, [])
print(max_sum)
탐색은 재밌는것 같다 ! 하면 할 수록!
반응형
'Algorithm > BaekJoon' 카테고리의 다른 글
[BaekJoon] "이분탐색" - 백준 10815번 문제 : 숫자 카드 (0) | 2024.01.17 |
---|---|
[BaekJoon] "최단거리" - 백준 18352번 문제 : 특정 거리의 도시 찾기 (0) | 2024.01.17 |
[BaekJoon] "그리디" - 백준 20365번 문제 : 블로그2 (0) | 2024.01.17 |
[BaekJoon] "그리디" - 백준 1541번 문제 : 잃어버린 괄호 (0) | 2024.01.17 |
[BaekJoon] "DP" - 백준 11055번 문제 : 가장 큰 증가하는 부분 수열 (0) | 2023.12.20 |
Comments