Coding Test/문제 풀이

[Algorithm] 준비운동 PART 2. 약점 체크

EUNJI HA 2022. 1. 11. 15:32
더보기

준비운동 PART2. 약점 체크

문제풀이를 쭉쭉하기 전, 기본 알고리즘을 잘 습득했는지 점검할 수 있는 문제를 소개합니다. 뼈대 문제는 시간을 두고 반복 구현하여 손에 익혀서 응용문제가 나왔을 때 유연하게 대처할 수 있는 생각을 길러야 합니다.

 

출처: https://covenant.tistory.com/224

 

14888번: 연산자 끼워넣기 (실버 1티어)

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 

www.acmicpc.net

n = int(input())
operands = list(map(int, input().split()))
operator = list(map(int, input().split()))

operators = (operator[0] * ['+']) + (operator[1] * ['-']) + (operator[2] * ['*']) + (operator[3] * ['//'])

# 순열 만들기
from itertools import permutations
operatorList = list(set(permutations(operators, len(operators)))) # set 안하면 시간 초과

resultList = []
# 계산하기
for operator in operatorList:  # [+, +, -, //, *]
    temp = operands[0]
    for i in range(n - 1):
        if operator[i] == '+':
            temp = temp + operands[i + 1]
        elif operator[i] == '-':
            temp = temp - operands[i + 1]
        elif operator[i] == '*':
            temp = temp * operands[i + 1]
        elif operator[i] == '//':
            if temp < 0:
                temp = -(-(temp) // operands[i + 1])
            else:
                temp = temp // operands[i + 1]
    resultList.append(temp)

print(max(resultList))
print(min(resultList))