반응형
✅문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/120853
✅ 문제 설명
문자열 s가 주어졌을 때, 숫자와 "Z"가 공백으로 구분되어 포함되어 있습니다.
- 숫자는 더하고,
- "Z"가 나오면 바로 전에 더했던 숫자를 제거하는 프로그램을 작성하세요.
🔍 제한사항
- 1 ≤ len(s) ≤ 200
- -1,000 < 숫자 < 1,000
- s는 숫자, "Z", 공백으로만 이루어져 있습니다.
- 숫자와 "Z"는 공백으로 구분됩니다.
- Z가 연속해서 나오는 경우는 없습니다.
- s의 시작과 끝에는 공백이 없습니다.
📌 입출력 예시
입력 / 출력
"1 2 Z 3" | 4 |
"10 20 30 40" | 100 |
"10 Z 20 Z 1" | 1 |
"10 Z 20 Z" | 0 |
"-1 -2 -3 Z" | -3 |
✅ "1 2 Z 3" → 1 + 2 후 Z로 2 제거 → 1 + 3 = 4
✅ "10 Z 20 Z 1" → 10 추가 후 Z로 제거 → 20 추가 후 Z로 제거 → 1 추가 → 최종 결과 1
✅ "10 Z 20 Z" → 10 추가 후 Z로 제거 → 20 추가 후 Z로 제거 → 최종 결과 0
🛠 문제 해결 코드
def solution(s):
stack = [] # 숫자를 저장할 스택
tokens = s.split() # 문자열을 공백 기준으로 분리
for token in tokens:
if token == "Z": # "Z"가 나오면 이전 숫자 제거
if stack: # 스택이 비어있지 않다면
stack.pop()
else: # 숫자는 스택에 추가
stack.append(int(token))
return sum(stack) # 남아있는 숫자들을 모두 더함
📌 실행 예제 및 결과
print(solution("1 2 Z 3")) # 4
print(solution("10 20 30 40")) # 100
print(solution("10 Z 20 Z 1")) # 1
print(solution("10 Z 20 Z")) # 0
print(solution("-1 -2 -3 Z")) # -3
✅ 출력 결과:
4
100
1
0
-3
🔍 코드 설명
- s.split()을 사용하여 공백 기준으로 문자열을 나누어 리스트로 저장
tokens = ["1", "2", "Z", "3"]
- for 루프를 돌면서 "Z"가 나오면 이전 숫자를 제거
- "1" 추가 → [1]
- "2" 추가 → [1, 2]
- "Z" → 2를 제거 → [1]
- "3" 추가 → [1, 3]
- 마지막으로 리스트의 숫자를 모두 더함 → 1 + 3 = 4
🔥 정리
개념 설명
문자열 분리 | s.split() 사용하여 숫자와 "Z" 구분 |
스택 활용 | "Z"가 나오면 이전 숫자를 제거 |
리스트의 합 계산 | sum(stack)으로 최종 결과 도출 |
반응형
댓글