반응형
https://www.acmicpc.net/problem/14888
해당 문제를 풀어 나갈때 permutations를 이용하는 것은 알았는데
이를 중복 제거하는 법을 잘 몰라 좀 헤매는 문제였다.
그냥 set(permutations())를 쓰면 되는걸 알게 된 문제..
아래 코드 참고
from itertools import permutations
answer = []
# 입력 값 받는 곳
N = int(input())
numbers = list(input().split())
operates = list(map(int, input().split()))
# 연산자 어떤게 포함되는 지 저장하는 곳
opers = []
# operates를 순회하면서 각 엽산자의 횟수만큼 저장
for idx in range(len(operates)):
if operates[idx]:
if idx == 0:
for _ in range(operates[idx]):
opers.append('+')
elif idx == 1:
for _ in range(operates[idx]):
opers.append('-')
elif idx == 2:
for _ in range(operates[idx]):
opers.append('*')
elif idx == 3:
for _ in range(operates[idx]):
opers.append('//')
# 중복을 제거한 순열을 돌면서 값을 순차적으로 계산
for oper in set(permutations(opers)):
deq = ''
for i in range(len(numbers)):
if i == 0:
deq = numbers[i]
else:
# 저장된 값이 음수인 경우, 양수로 변환한 뒤 몫을 구해주고 양수이면 그냥 계산
if oper[i - 1] == '//' and int(deq) < 0:
deq = str(eval('-1*' + deq))
deq = str(-1 * eval(deq + oper[i - 1] + numbers[i]))
else:
deq = str(eval(deq + oper[i - 1] + numbers[i]))
# 각 값을 answer에 저장
answer.append(int(deq))
# 최대, 최소 출력
print(max(answer))
print(min(answer))
반응형
'IT 톺아보기 > 알고리즘' 카테고리의 다른 글
[백준 15686번 | 삼성 SW 역량 테스트 기출] 치킨 배달 - python (0) | 2022.09.01 |
---|---|
백준 1991번 트리 순회 - python (0) | 2022.07.26 |
백준 2004번 조합 0개의 개수 - python (0) | 2022.06.20 |
[python]백준 21610번 - 마법사 상어와 비바라기 (feat. 삼성 SW 역량 테스트 기출 문제) (0) | 2021.12.02 |
[python]백준 13458번 - 시험 감독 (feat. 삼성 SW 역량 테스트 기출 문제) (0) | 2021.11.30 |