🗒 문제


📝 나의 문제풀이
class Solution {
fun solution(s: String): Int {
val list = s.split(" ")
var answer = 0
list.mapIndexed{ idx, v ->
when(v){
"Z" -> answer -= list[idx - 1].toInt()
else -> answer += v.toInt()
}
}
return answer
}
}
when (v) {
"Z" -> answer -= list[idx - 1].toInt()
else -> answer += v.toInt()
}
문제점 1
- "Z"가 나오면 항상 바로 앞 값을 빼고 있음
- 그런데 앞 값이 이미 취소된 값일 수도 있음
- 구조적으로 안전하지 않음
📝 다른 사람의 문제 풀이
다른 사람의 문제 풀이는 좋아요 수가 높거나 많은 사람들이 푼 방법 기준으로 첨부하였습니다.
import java.util.*
class Solution {
fun solution(s: String): Int {
var answer = 0
val stack = Stack<Int>()
for (w in s.split(" ".toRegex())) {
if (w == "Z") {
stack.pop()
} else {
stack.push(w.toInt())
}
}
for (i in stack) {
answer += i
}
return answer
}
}
🖊 문제 풀이 시 알면 좋을 것
split
- 문자열을 공백 기준으로 나눠서 List<String> 반환
"1 2 Z 3".split(" ")
// ["1", "2", "Z", "3"]
mapIndexed
- 리스트를 순회하면서
- 인덱스(idx) 와 값(v) 을 동시에 받음
- ❗ 원래는 새 리스트를 만들기 위한 함수
👉 그런데 여기서는 리턴값을 안 쓰고 있음
list.mapIndexed { ... } // 결과 리스트 버려짐
이건 map의 용도와 맞지 않음
→ 이런 경우는 forEachIndexed가 더 맞음
Stack<Int>
Stack = 쌓아 올리는 구조
- 접시 쌓기 생각하면 됨
- 마지막에 넣은 것부터 먼저 꺼냄
👉 LIFO (Last In, First Out)
👉 후입선출
tack<Int>를 언제 쓰냐면?
✔ 가장 최근에 한 작업을 취소해야 할 때
✔ 이전 상태로 되돌아가야 할 때
✔ 괄호 검사, 실행 취소(Undo), Z 문제
이번 문제에서:
- 숫자 → 스택에 push
- "Z" → 직전에 더한 숫자 취소 → pop
Stack<Int> 기본 동작
| 동작 | 의미 |
| push(x) | 값 넣기 |
| pop() | 마지막 값 꺼내기 |
| peek() | 마지막 값 보기 |
| isEmpty() | 비었는지 |
예시
"1 2 Z 3"
단계별 처리
| 입력 | 스택 상태 | 설명 |
| "1" | [1] | 숫자 → push |
| "2" | [1, 2] | 숫자 → push |
| "Z" | [1] | pop (2 취소) |
| "3" | [1, 3] | 숫자 → push |
최종 합
1 + 3 = 4
Kotlin에서 Stack<Int> 쓰는 법
가장 쉬운 방식 (MutableList 사용)
val stack = mutableListOf<Int>()
👉 Kotlin에서는 Stack 클래스보다
👉 MutableList를 스택처럼 쓰는 게 일반적
스택 연산 대응
| 스택 개념 | Kotlin 코드 |
| push | stack.add(x) |
| pop | stack.removeLast() |
| peek | stack.last() |
문제에 Stack<Int> 적용한 정답 코드
class Solution {
fun solution(s: String): Int {
val stack = mutableListOf<Int>()
for (token in s.split(" ")) {
if (token == "Z") {
stack.removeLast()
} else {
stack.add(token.toInt())
}
}
return stack.sum()
}
}
sum()
- Stack<Int> → Iterable<Int>
- 모든 값 합산
반응형
'코딩테스트' 카테고리의 다른 글
| [프로그래머스] 모스부호(1) (1) | 2025.12.23 |
|---|---|
| [프로그래머스] 7의 개수 (0) | 2025.12.22 |
| [프로그래머스] k의 개수 (0) | 2025.12.22 |
| [프로그래머스] 2차원으로 만들기 (0) | 2025.12.22 |
| [프로그래머스] 가까운 수 (0) | 2025.12.22 |