Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Autolayout
- error
- 오토레이아웃
- Swift공부
- Python
- BFS
- 프로그래머스
- dfs
- Kotlin
- UIKit
- 백준온라인저지
- Algorithm
- 앱개발
- ios
- iOS개발
- 안드로이드 공부
- 공부
- greedy algorithm
- 정렬
- 파이썬
- 알고리즘
- swift
- 백준 온라인 저지
- SwiftUI
- Level 1
- 알고리즘 공부
- 그리디 알고리즘
- Android
- Clean Architecture
- 파이썬 풀이
Archives
- Today
- Total
Tori의 개발 공부
[python] 1541번 - 잃어버린 괄호 본문
문제
파이썬 문제 풀이
괄호를 이용하여 최소의 결과를 얻어내는 문제이다.
가장 작은 값을 얻기 위한 방법을 간단하게 생각하면 가장 큰 값을 빼주면 된다.
즉 마이너스 연산을 만나면 가장 큰 값을 빼주면 된다.
가장 큰 값을 빼주기위해 마이너스를 만나게 되면 다음 마이너스까지 있는 플러스 연산들을 모두 괄호로 묶어 가장 큰 수를 만들어주면 된다.
eval함수를 이용한 코드 : 틀림
import sys
input = sys.stdin.readline
inputExp = input().rstrip().split("-")
resultExp = 0
for index, i in enumerate(inputExp) :
if index == 0 :
resultExp += eval(i)
else :
resultExp -= eval(i)
print(resultExp)
-를 기준으로 분리한 식들의 값을 구하는 과정을 eval함수를 사용한 방법이다.
보통의 경우 알맞게 나왔지만,
문제의 예제 입력3인 00009 - 00009에서 오류가 발생했다.
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers
오류의 내용은 숫자 앞에 0이 선행으로 나왔기 때문이다.
따라서 eval함수를 사용하지 않는 방법을 찾기로 했다.
+를 기준으로 다시 나누어 숫자 하나하나 접근하는 코드
import sys
input = sys.stdin.readline
inputExp = input().rstrip().split("-")
resultExp = 0
for index, i in enumerate(inputExp) :
for j in i.split("+") :
if index == 0 :
resultExp += int(j)
else :
resultExp -= int(j)
print(resultExp)
결국 -로 분리한 식들을 다시 한번 +로 분리하여 첫 번째 식만 result에 더하고 나머지 식은 -로 연결되었던 식이므로 result에서 빼주는 작업을 하였다.
+로 분리하여 숫자 하나하나 접근하였고, 접근한 숫자(문자열 : 입력값은 문자열이기 때문)를 int()를 통해 문자열로 쓰인 숫자를 정수형으로 바꾸어 계산할 수 있도록 하였다.
int() 과정에서 0009와 같은 숫자도 9로 치환되었기 때문에 오류 없이 해결할 수 있었다.
'Algorithm > 백준 문제풀이' 카테고리의 다른 글
[python] 13305번 - 주유소 (0) | 2021.11.24 |
---|---|
[python] 1931번 - 회의실 배정 (0) | 2021.11.23 |
[python] 2108번 - 통계학 (0) | 2021.09.08 |
[python] 18870번 - 좌표 압축 (0) | 2021.09.03 |
[python] 10814번 - 나이순 정렬 (0) | 2021.09.03 |