티스토리 뷰
일단 숫자(numbers)와 연산자(operators)를 구분해주었다.
보통 구분자를 기준으로 나눌 때 split 함수를 사용하는데, 여기서는 +, - 두 가지로 구분을 해야하기 때문에
import re 를 통해 여러 개 구분자로 split 해주었다.
아래 코드와 같이 numbers = re.split('[+-]', S) 으로 써주었다.
split 기준이 될 기호를 '[ ]' 안에 넣는 형식으로 사용한다.
문제 풀이 아이디어
최솟값이 나와야 하므로 +와 -가 있을 때 최대한 -로 계산되게 하는 것이 문제의 핵심이었다.
previous에 이전 연산자를 넣고, now에 현재 계산할 연산자를 넣은 다음, 둘을 비교하여 현재 숫자를 더할지 뺄지 결정하였다.
(1) previous = +, now = +
그대로 + 로 계산해준다. 괄호가 필요 없다.
previous와 now가 같으므로 업데이트가 필요없다.
(2) previous = +, now = -
-로 계산한 뒤, previous는 -로 업데이트한다.
(3) previous = -, now = +
-로 계산한 뒤, previous는 그대로 -로 유지한다.
1-2+3 이 주어졌을 때, 1-(2+3) 이 최솟값이다. 즉 1에서 2도 빼고 3도 빼야 한다.
괄호가 생기므로 previous는 -로 유지한다.
(4) previous = -, now = -
-로 계산한 뒤, previous와 now가 같으므로 그대로 -로 유지한다.
1-2-3 이 주어졌을 때, 괄호 없이 모두 - 로 계산하는 것이 최솟값이다.
import re
S = input()
numbers = []
operators = []
numbers = re.split('[+-]', S)
for s in S:
if s == '+' or s == '-':
operators.append(s)
answer = int(numbers[0])
previous = '+'
for i in range(len(operators)):
now = operators[i]
if previous == '+':
if now == '+':
answer += int(numbers[i+1])
else:
answer -= int(numbers[i+1])
previous = '-'
else:
answer -= int(numbers[i+1])
print(answer)
https://www.acmicpc.net/problem/1541
'알고리즘, 코딩테스트 > BOJ 문제풀이' 카테고리의 다른 글
[백준 1654] 랜선 자르기 - 파이썬 :: 이진탐색, 파라메트릭탐색 (0) | 2022.05.01 |
---|---|
[BOJ 1946] 신입사원 :: python 파이썬 (0) | 2022.04.24 |
BOJ 10787번: 숨바꼭질6 [python] 코드와 풀이 - 여러 숫자의 최대공약수 (0) | 2021.02.11 |
[python] BOJ 백준 소수 관련 문제 - 1929, 6588 :: 소수구하기, 골드바흐의 추출 (0) | 2021.02.08 |
백준 BOJ 1158번 요세푸스 문제 [python] (0) | 2021.02.08 |
- Total
- Today
- Yesterday
- 백준
- 파이썬
- S3 403 forbidden
- BOJ
- partyrock무료
- 병돌리기구현
- easycode
- S3배포
- 코딩테스트
- 오블완
- 티스토리챌린지
- genaiapp
- vscode easycode
- ChatGPT
- 정적 웹페이지 배포
- SpacewBetween
- partyrock사용볍
- partyrock
- 알고리즘
- 생성형AI
- awsgenai
- AWSBedrock
- 정적 웹사이트 배포
- easycode chatGPT
- React native 작동 원리
- partyrock앱
- partyrock생성
- 술자리병돌리기게임
- aws생성형ai
- PYTHON
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |