728x90
반응형
목차
문제
https://www.acmicpc.net/problem/1541
설계&풀이
아이디어는 옳게 접근했으나, 구현을 못했다.
요건은 간단하다. -를 기준으로 split 해주고, 나머지 애들을 다 묶어버리면 된다.
여러가지 케이스가 있는데..
- 10+20-10
맨 앞이 +로 시작해서 묶이는 경우 - 10-20
맨 앞이 단순 숫자인 경우 - 10-20+30
맨 앞은 숫자, 뒤가 +로 묶이는 경우 - 10
하나만 들어오는 경우 - 10+20
+만 들어오는 경우 - 10-20-20
-만 들어오는 경우 - 10-20+30-10
도중에 +로 묶어주고 마지막으로 -해주는 경우 - 등등등..
이런걸 다 케이스로 나눠서 하려고 짠 코드가... 다음과 같다.
사실 도중에 뭔가 잘못됨을 깨달았지만 뭔가 될거같아서 어거지로 풀려고했는데, 계속 틀려서 결국 답지를 봤다..
# 틀린 풀이
s = input().split('-')
if len(s) == 1:
s = s[0]
# 10+20+30 처럼 +만 있는 경우는 len(s) == 1임
if s.find('+') != -1:
temp = list(map(int, s.split('+')))
print(sum(temp))
# 아니면 숫자만 주어지는 경우
else:
print(s)
else:
# 55-50+40-40+20-20 = -115
tempSum = 0
# s[0]이 10+20 이렇게 더해진 값이 아닐 때 사용되는 flag
flag = True
if s[0].find('+') == -1:
tempSum = int(s[0])
else:
tempSum = sum(list(map(int, s[0].split('+'))))
flag = False
n = len(s)
for i in range(n):
if s[i].find('+') != -1 and flag:
temp = list(map(int, s[i].split('+')))
tempSum -= sum(temp)
# 마지막에 - 인 경우 그냥 -= 해줌
if s[i].find('+') == -1 and i == len(s)-1:
tempSum -= int(s[i])
print(tempSum)
그리고 답은 정말 깔끔하다
이게 - 로 split 하고나서 첫 숫자도 계산해버리는 경우를 어떻게 해야하나 해서 flag를 따로 뒀었는데 (사실 맞는 방법이라곤 생각안함, 이 때부턴 그냥 맞춘다 마인드였음)
그냥 애초에 1부터 n까지로 for문 돌리면되는거였다..
s = input().split('-')
num = []
for i in s:
cnt = 0
s = i.split('+')
for j in s:
cnt += int(j)
num.append(cnt)
n = num[0]
for i in range(1, len(num)):
n -= num[i]
print(n)
코드 GIT 주소
PS_study/1.py at main · kkkapuq/PS_study · GitHub
코드
'''
문제 : 잃어버린 괄호
난이도 : 실버 2
링크 : https://www.acmicpc.net/problem/1541
'''
'''
1. - 뒤에 붙는 애들을 싹 다 묶어버리면 그게 최소다
2. + 로 split 하고 sum(list) 해준걸 계속 -= 해주자
'''
'''
# 틀린 풀이
s = input().split('-')
if len(s) == 1:
s = s[0]
# 10+20+30 처럼 +만 있는 경우는 len(s) == 1임
if s.find('+') != -1:
temp = list(map(int, s.split('+')))
print(sum(temp))
# 아니면 숫자만 주어지는 경우
else:
print(s)
else:
# 55-50+40-40+20-20 = -115
tempSum = 0
# s[0]이 10+20 이렇게 더해진 값이 아닐 때 사용되는 flag
flag = True
if s[0].find('+') == -1:
tempSum = int(s[0])
else:
tempSum = sum(list(map(int, s[0].split('+'))))
flag = False
n = len(s)
for i in range(n):
if s[i].find('+') != -1 and flag:
temp = list(map(int, s[i].split('+')))
tempSum -= sum(temp)
# 마지막에 - 인 경우 그냥 -= 해줌
if s[i].find('+') == -1 and i == len(s)-1:
tempSum -= int(s[i])
print(tempSum)
'''
s = input().split('-')
num = []
for i in s:
cnt = 0
s = i.split('+')
for j in s:
cnt += int(j)
num.append(cnt)
n = num[0]
for i in range(1, len(num)):
n -= num[i]
print(n)
결과
구독 및 하트는 정보 포스팅 제작에 큰 힘이됩니다♡
728x90
반응형
'PS, 언어 공부 > 알고리즘 문제풀이' 카테고리의 다른 글
[Python] 백준 온라인 저지 15649 N과 M(1) (0) | 2023.02.19 |
---|---|
[Python] Leetcode 134. Gas station (0) | 2022.10.03 |
[Python] 백준 온라인 저지 18870 좌표 압축 (0) | 2022.07.29 |
[Python] 백준 온라인 저지 17609 회문 (0) | 2022.07.22 |
[Python] Programmers 더 맵게 (0) | 2022.06.10 |