PS

[λ°±μ€€] 14888 μ—°μ‚°μž λΌμ›Œλ„£κΈ° with Python

ν˜•μ€€_It's 2022. 1. 24. 20:44
728x90
λ°˜μ‘ν˜•

πŸ“Œ BOJ 14888 μ—°μ‚°μž λΌμ›Œλ„£κΈ°

πŸ’‘ 쑰건

  1. N개의 수둜 이루어진 μˆ˜μ—΄ A1, A2, ..., AN

  2. μˆ˜μ™€ 수 사이에 λΌμ›Œλ„£μ„ 수 μžˆλŠ” N-1개의 μ—°μ‚°μž
    μ—°μ‚°μžλŠ” λ§μ…ˆ(+), λΊ„μ…ˆ(-), κ³±μ…ˆ(Γ—), λ‚˜λˆ—μ…ˆ(Γ·)으둜만 이루어져 μžˆλ‹€.

  3. 수의 개수 N(2 ≀ N ≀ 11)
    A1, A2, ..., AN이 주어진닀. (1 ≀ Ai ≀ 100)

  4. 첫째 쀄에 λ§Œλ“€ 수 μžˆλŠ” μ‹μ˜ 결과의 μ΅œλŒ“κ°’μ„, λ‘˜μ§Έ μ€„μ—λŠ” μ΅œμ†Ÿκ°’μ„ 좜λ ₯

  5. μˆœμ—΄, 브루트포슀 μ•Œκ³ λ¦¬μ¦˜ μœ ν˜•μ˜ 문제

πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

from sys import stdin
from itertools import permutations

n = int(stdin.readline().rstrip())
num = list(map(int, stdin.readline().split()))
cal_ = list(map(int, stdin.readline().split()))


gi = ['+', '-', '*', '/']
cg = []
vmax = -1e9
vmin = 1e9


def calculation(sign, num):
    global vmax, vmin
    calc_num = num[0]

    for idx in range(1, len(num)):
        if sign[idx - 1] == '+':
            calc_num += num[idx]

        elif sign[idx - 1] == '-':
            calc_num -= num[idx]

        elif sign[idx - 1] == '*':
            calc_num *= num[idx]

        elif sign[idx - 1] == '/':
            if num[idx] < 0 or calc_num < 0:
                calc_num = abs(calc_num) // abs(num[idx]) * -1
            else:
                calc_num //= num[idx]

    vmax = max(vmax, calc_num)
    vmin = min(vmin, calc_num)


for i in range(4):
    cg.extend([gi[i]] * cal_[i])


for sign in list(set(permutations(cg, n - 1))):
    calculation(sign, num)

print(vmax)
print(vmin)

πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

예제

2
5 6
0 0 1 0

μ‹€ν–‰κ²°κ³Ό

30
30

⌨️ 문제 풀이

  1. permutations 라이브러리 import

  2. μ—°μ‚°μžλ₯Ό λ§μ…ˆ(+), λΊ„μ…ˆ(-), κ³±μ…ˆ(Γ—), λ‚˜λˆ—μ…ˆ(Γ·) μˆœμ„œλŒ€λ‘œ 담은 gi 리슀트 μ„ μ–Έ.

  3. μ—°μ‚°μžμ˜ 개수 리슀트λ₯Ό μž…λ ₯λ°›μ•„ 각 μ—°μ‚°μžμ˜ 개수만큼 κ³±ν•˜μ—¬ cg λ¦¬μŠ€νŠΈμ— extend ν•΄μ€€λ‹€.

  4. cg 리슀트의 κΈΈμ΄λŠ” μž…λ ₯받은 μˆ˜μ—΄μ˜ 길이 - 1이닀.
    permutaions ν•¨μˆ˜λ₯Ό 톡해 μˆœμ—΄μ„ 톡해 μ—°μ‚°μžμ˜ 경우λ₯Ό 뽑아 calculation ν•¨μˆ˜μ— λ„£κ³  κ³„μ‚°ν•œλ‹€.

  5. calculation ν•¨μˆ˜μ—μ„œ zero division μ—λŸ¬λ₯Ό μ‘°μ‹¬ν•΄μ•Όν•œλ‹€.

  6. calculation ν•¨μˆ˜μ—μ„œ κ³„μ‚°ν•œ κ²°κ³Όκ°’μœΌλ‘œ μ΅œμ†Ÿκ°’κ³Ό μ΅œλŒ“κ°’μ„ κ°±μ‹ ν•΄μ€€λ‹€.

πŸ’Ύ λŠλ‚€μ 

  1. permutations ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°„λ‹¨ν•˜κ²Œ ν’€ 수 μžˆμ–΄ 맀우 μ°©ν•œ λ¬Έμ œμ˜€λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
  2. μ‹œκ°„μ΄ˆκ³Όκ°€ μ•ˆλ‚˜κ²Œ ν•˜κΈ° μœ„ν•΄μ„œ permutations ν•¨μˆ˜ κ²°κ³Όλ₯Ό set() 으둜 λ‘˜λŸ¬μ‹Έμ„œ 쀑볡을 μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€.
λ°˜μ‘ν˜•