프로그래밍/코딩테스트
[백준] 1, 2, 3 더하기 2 (12101) - python
K.Seungmin
2024. 10. 3. 16:10
문제 링크 : https://www.acmicpc.net/problem/12101
문제 요약
정수 n이 주어졌을 때 n을 1, 2, 3의 합으로 나타내는 방법 중에서 사전순으로 정렬했을 때 k번째로 오는 식을 나타내는 문제입니다.
풀이
문제 풀이를 위해 DFS(깊이 우선 탐색) 알고리즘을 사용했습니다. 각 조합에 가장 작은 수인 1을 우선으로 추가해 주면서 DFS를 진행하게 된다면 최종 리스트에는 정렬된 값이 순서대로 들어있기 때문에 효율적으로 문제를 해결할 수 있습니다.
정답 코드
import sys
input = sys.stdin.readline
def dfs(nums, n, numbers):
sumNums = sum(nums)
if sumNums == n:
numbers.append(nums)
elif sumNums > n:
return
if len(nums) > n:
return
for i in range(1, 4):
dfs(nums + [i], n, numbers)
def main():
n, k = map(int, input().split())
numbers = []
dfs([], n, numbers)
if len(numbers) < k:
print('-1')
else:
print('+'.join(map(str, numbers[k-1])))
return
if __name__ == "__main__":
main()
리뷰
처음 BFS 함수를 작성했을 때는 elif 문을 작성하지 않고 답을 작성했습니다. 그래도 코드가 통과되는 모습을 보고 더 생각하지 않으려고 했는데 소요시간이 생각보다 많이 나오는 것 같아서 필요 없는 연산을 줄여주는 방향으로 코드를 수정하게 되었습니다. 이러한 요인들이 더 복잡한 문제에서는 시간문제로 이어질 수 있기 때문에 유의해서 풀어야겠다고 생각했습니다.