본문 바로가기
카테고리 없음

[programmers] '컨트롤 제트' 문제 해설 및 정답코드

by Echinacea 2025. 3. 19.
반응형

 

✅문제 링크

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

 

 

🔍 코드 설명

  1. s.split()을 사용하여 공백 기준으로 문자열을 나누어 리스트로 저장
    tokens = ["1", "2", "Z", "3"]
    
  2. for 루프를 돌면서 "Z"가 나오면 이전 숫자를 제거
    • "1" 추가 → [1]
    • "2" 추가 → [1, 2]
    • "Z" → 2를 제거 → [1]
    • "3" 추가 → [1, 3]
  3. 마지막으로 리스트의 숫자를 모두 더함 → 1 + 3 = 4

 

 

🔥 정리

개념 설명

문자열 분리 s.split() 사용하여 숫자와 "Z" 구분
스택 활용 "Z"가 나오면 이전 숫자를 제거
리스트의 합 계산 sum(stack)으로 최종 결과 도출

 

반응형

댓글