[Python] 백준/BOJ 1541번: 잃어버린 괄호 (Silver 2)

2025. 1. 22. 11:00·Algorithm/백준 (BOJ)
반응형

💻 Problem

문제 보러 가기

 

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

 

💡 Approach

처음에 생각이 잘 안 났다..

그리디인 줄도 몰랐는데 모든 경우의 수를 따지는 게 아니라 괄호가 들어가야 하는 최선의 선택만을 따져야 해서 그리디인 것 같다.

 

문제의 목표는 식의 값을 최소로 만드는 것이다.

식의 값을 가장 작게 만들기 위해서는 최대한 큰 수를 빼야 한다.

즉, '-' 뒤에는 항상 괄호를 치는 것이 좋다.

 

예를 들어, 5+4-5-10+20 라는 식이 주어졌다고 치자.

가장 작은 수를 만들기 위해서는 빼는 수가 최대한 커야 한다.

5+4-5-10+20 여기서 그냥 -10을 하는 것보다 -(10+20)을 하면 빼는 값이 더 커진다.

 

'-' 뒤에는 괄호를 친다고 생각하고 '-'를 기준으로 처음 식을 쪼갠다.

쪼갠 식은 5+4, 5, 10+20 일 것이다.

 

각각의 쪼갠 식들을 계산한다.

마찬가지로 각각의 식을 '+'를 기준으로 쪼개서 더하면 된다.

그러면 9, 5, 30이 된다.

 

마지막으로 9-5-30을 구하면 최소 결괏값인 -26이 나온다.

 

✏️ Solution

import sys
input = sys.stdin.readline

# '-'를 기준으로 식을 쪼갠다
exprs = input().rstrip().split('-')
num = []

# 쪼갠 식들을 각각 계산한다
# '+'를 기준으로 다시 쪼개서 합을 구한다
for expr in exprs:
    num.append(sum(map(int, expr.split('+'))))

# num 리스트 안의 숫자들을 계산한다
# num[0] - num[1] - ...
ans = num[0]
for i in range(1, len(num)):
    ans -= num[i]

print(ans)

 

시간복잡도는 O(n)이다.

 

추가로 위 코드를 더 짧게 압축할 수 있다..!

내용은 같지만 더 짧게 쓴 코드이다.

 

import sys
input = sys.stdin.readline

# 입력받은 식을 '-'로 쪼갠다
exprs = input().rstrip().split('-')

# '+'를 기준으로 다시 쪼개서 합을 구한다
num = [sum(map(int, expr.split('+'))) for expr in exprs]

# num 리스트 안의 숫자들을 뺀다
ans = num[0] - sum(num[1:])

print(ans)

 

네 줄 컷.. 파이썬은 놀라워🙄

반응형

'Algorithm > 백준 (BOJ)' 카테고리의 다른 글

[Python] 백준/BOJ 11403번: 경로 찾기 (Silver 1)  (0) 2025.01.24
[Python] 백준/BOJ 11724번: 연결 요소의 개수 (Silver 2)  (1) 2025.01.23
[Python] 백준/BOJ 9375번: 패션왕 신해빈 (Silver 3)  (0) 2025.01.21
[Python] 백준/BOJ 1003번: 피보나치 함수 (Silver 3)  (0) 2025.01.20
'Algorithm/백준 (BOJ)' 카테고리의 다른 글
  • [Python] 백준/BOJ 11403번: 경로 찾기 (Silver 1)
  • [Python] 백준/BOJ 11724번: 연결 요소의 개수 (Silver 2)
  • [Python] 백준/BOJ 9375번: 패션왕 신해빈 (Silver 3)
  • [Python] 백준/BOJ 1003번: 피보나치 함수 (Silver 3)
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (197) N
      • SSAFY (10)
      • Algorithm (115) N
        • 이론 (6)
        • 백준 (BOJ) (108) N
        • 프로그래머스 (1)
      • Trouble Shooting (9)
      • Frontend (6)
      • React (17)
      • Next.js (4)
      • Vue (4)
      • Node.js (2)
      • HTML (9)
      • DevOps (4)
        • Git (4)
      • Language (9)
        • JavaScript (0)
        • Java (9)
      • Embedded (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
      • 자격증 (2)
  • 블로그 메뉴

    • GitHub
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    순열
    React
    강의
    파이썬
    Error
    재귀
    SSAFY
    힙
    오블완
    중복순열
    Algorithm
    구현
    백트래킹
    싸피
    수학
    중복조합
    브루트포스
    Java
    Next.js
    html5
    백준
    우선순위큐
    블록체인
    bfs
    티스토리챌린지
    dfs
    SSAFYcial
    DP
    알고리즘
    Heap
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
올콩
[Python] 백준/BOJ 1541번: 잃어버린 괄호 (Silver 2)
상단으로

티스토리툴바