ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 14888 μ—°μ‚°μž λΌμ›Œλ„£κΈ° with Python
    PS 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() 으둜 λ‘˜λŸ¬μ‹Έμ„œ 쀑볡을 μ œκ±°ν–ˆμŠ΅λ‹ˆλ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.