문제 풀이)
백트래킹으로 문제를 풀었다. depth를 인덱스 삼아 1,2,...,N까지 수를 수식에 더하며 dfs함수를 호출했다.
결과는 ASCII 순서로 출력해야하므로 dfs 함수 재귀호출 시 sorted(['+', '-', ' ']) 로 정렬한 순으로 기호를 덧붙였다.
파이썬에는 eval() 이라는 강력한 함수가 존재하는데 공백 문자 그대로 입력하면 숫자가 붙여지지않고 에러를 내서 수식에 replace(' ', '') 한 결과를 eval 함수의 인자로 넘겼다.
문제 코드)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def dfs(depth, exp): if depth==n: if eval(exp.replace(' ', ''))==0: print(exp) return for op in sorted(['+','-',' ']): dfs(depth+1, exp+op+string[depth]) for _ in range(int(input())): n=int(input()) string=''.join(map(str, range(1,n+1))) dfs(1,'1') print() | cs |
'알고리즘 공부' 카테고리의 다른 글
[삼성SW역량테스트] 상어중학교 (백준 21609)| Python3 (0) | 2021.10.18 |
---|---|
[삼성SW역량테스트] 마법사 상어와 비바라기 (백준 21610 )| Python3 (0) | 2021.10.14 |
[Programmers 위클리 챌린지] 9주차 전력망을 둘로 나누기 풀이 | Python3 (0) | 2021.10.06 |
[BOJ] 로또(6603) 문제 풀기 | Python3 (0) | 2021.10.03 |
[BOJ] N과M (1) (15649) 문제 풀기 | Python3 (0) | 2021.10.03 |