1. 백준 7490, 0 만들기
https://www.acmicpc.net/problem/7490
7490번: 0 만들기
각 테스트 케이스에 대해 ASCII 순서에 따라 결과가 0이 되는 모든 수식을 출력한다. 각 테스트 케이스의 결과는 한 줄을 띄워 구분한다.
www.acmicpc.net
2. 요구사항
- 첫번째 입력값은 테스트 케이스의 개수(N < 10)가 주어진다.
ex) 2가 입력된다면, 테스트 케이스가 2개라는 뜻
- 그 다음 N개 만큼 테스트 할 숫자의 범위(3 <= N <= 9)가 입력된다.
ex) N이 2인 상태에서 3, 7이 입력된다면 첫번째 케이스는 1~3, 두번째 케이스는 1~7의 오름차순 수열을 의미한다.
- 수열 사이에 +, - , 공백을 사용하여 하나의 수식을 만든다.
- 만들어진 수식의 연산 결과가 0이 되는 모든 수식을 찾는다.
3. 어떻게 풀까?
- 어떻게 수열을 수식화하여 0으로 만드는지 그 규칙성을 생각해보았다.
- 30분동안 붙잡았는데 잘 모르겠다.
- 그냥 바로 해답으로 가자.
4. 해설
- 수열의 범위가 최대 3~9 까지 이므로, 완전 탐색으로 문제를 해결할 수 있다.
- 수열을 담은 배열과 연산자를 담은 배열로 나누어 해결해볼 수 있다.
N이 3인경우, [1,2,3] 수열이 작성되고 연산자가 들어갈 수 있는 공간은 다음과 같다.
- 1과 2사이
- 2와 3사이
그럼 2개 연산자의 조합을 경우의 수(3의 n-1승)를 만들어 보면 다음과 같다.
[공백 , 공백] [공백 , +] [공백 , -]
[+ , +] [+ , 공백] [+ , -]
[- , -] [- , 공백] [- , +]
총 9가지의 경우의 수가 나온다.
이를 기반으로 생각해보면, 최대로 연산하는 경우의 수는 3의 8승(약 3만개) 이다.
5. 코드
import copy
def recursive(array, n):
if len(array) == n:
operators_list.append(copy.deepcopy(array))
return
array.append(' ')
recursive(array, n)
array.pop()
array.append('+')
recursive(array, n)
array.pop()
array.append('-')
recursive(array, n)
array.pop()
test_case = int(input())
for _ in range(test_case):
operators_list = []
n = int(input())
recursive([], n - 1)
integers = [i for i in range(1, n + 1)]
for operators in operators_list:
string = ""
for i in range(n - 1):
string += str(integers[i]) + operators[i]
string+= str(integers[-1])
if eval(string.replace(" ", "")) == 0:
print(string)
print()
6. 참고자료
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
https://blockdmask.tistory.com/437
[python] 파이썬 eval 함수 정리 및 예제
안녕하세요. BlockDMask 입니다. 오늘은 조금 색다른 함수인 eval 이라는 함수를 가지고 왔습니다. 이 함수는 간단해서 이해하는데는 문제가 없을 것 입니다. 하지만, 이 함수가 유용한게 맞는지
blockdmask.tistory.com
https://bluese05.tistory.com/64
python eval() 함수 - 사용을 조심해야 하는 이유
python eval() 함수 python 의 built-in 함수 중 하나인 eval 함수는 매우 강력하면서도 사용을 자제 하도록 권고하는 양날의 검과 같은 기능이다. 먼저 python docs 의 정의를 보자. eval(expression, globa..
bluese05.tistory.com
'Algorithm > 알고리즘 문제풀이' 카테고리의 다른 글
오늘의 알고리즘(백준 11004) (0) | 2021.07.23 |
---|---|
오늘의 알고리즘(백준 2751) (0) | 2021.07.23 |
오늘의 알고리즘(5월 5일) (0) | 2021.05.05 |
오늘의 알고리즘(5월 4일) (0) | 2021.05.04 |
오늘의 알고리즘(4월 29일) (0) | 2021.04.29 |
댓글