ps:problems:boj:7490
0 만들기
| ps | |
|---|---|
| 링크 | acmicpc.net/… |
| 출처 | BOJ |
| 문제 번호 | 7490 |
| 문제명 | 0 만들기 |
| 레벨 | 골드 5 |
| 분류 |
브루트 포스 |
| 시간복잡도 | O(t*n*3^n) |
| 인풋사이즈 | t<=9, n<=9 |
| 사용한 언어 | Python |
| 제출기록 | 30860KB / 164ms |
| 최고기록 | 60ms |
| 해결날짜 | 2022/02/04 |
풀이
- 그냥 모든 조합을 다 시도해서 0이 되는 것들을 찾으면 된다.
- 백트래킹으로 어느정도의 가지치기를 해줄수도 있겠지만, 그런것 없이 3^(n-1)가지의 모든 경우를 다 시도해봐도 n이 작아서 돌리는데에 별 무리가 없다.
- 만들어진 각각의 식에 대해서, 결과값을 계산하는 것은 공백 연산자의 존재때문에 조금 구현이 귀찮다. 보통때에는 금기시하고 있지만, 이번에는 그냥 eval()을 사용해서 계산해버렸다.
- O(3^n)가지의 식에 대해서 계산시간이 O(n)이 걸리므로 총 시간 복잡도는 O(n*3^n)
코드
"""Solution code for "BOJ 7490. 0 만들기".
- Problem link: https://www.acmicpc.net/problem/7490
- Solution link: http://www.teferi.net/ps/problems/boj/7490
Tags: [Brute Force]
"""
import itertools
OPER = (' ', '+', '-')
def main():
t = int(input())
for _ in range(t):
N = int(input())
s = [None] * (N + N - 1)
s[::2] = [str(x) for x in range(1, N + 1)]
for t in itertools.product(OPER, repeat=(N - 1)):
s[1::2] = t
expression = ''.join(s)
# pylint: disable=eval-used
if eval(expression.replace(' ', '')) == 0:
print(expression)
print()
if __name__ == '__main__':
main()
ps/problems/boj/7490.txt · 마지막으로 수정됨: 2022/02/06 16:01 저자 teferi

토론