일단은 간단하게 풀었는데,
class Solution {
public int solution(String s) {
int answer = 0;
String[] str = s.split(" ");
int num = 0;
for(int i=0; i<str.length; i++) {
if(str[i].equals("Z")) answer -= num;
else {
num = Integer.parseInt(str[i]);
answer += num;
}
}
return answer;
}
}
스택으로 풀 수 있을 것 같긴 했음. 마침 타인의 풀이 중에도 있길래 나도 Stack 클래스를 써보기로 함.
import java.util.Stack;
class Solution {
public int solution(String s) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
for(String str : s.split(" ")) {
if(str.equals("Z")) {
stack.pop();
} else {
stack.push(Integer.parseInt(str));
}
}
while(stack.size() > 0) {
if(stack.empty()) break;
answer += stack.pop();
}
/*
* 혹은 이렇게
for(int i : stack) {
answer += i;
}
*/
return answer;
}
}
마지막에서 나는 size()와 empty(), 그리고 pop()을 썼는데, 이는 pop()이 가장 마지막에 들어온 값을 삭제하면서 (스택은 후입선출이니까) 그 값을 반환한다는 것을 배운 기억이 있어서 그렇다.
stack도 for each문이 되는 줄은 몰랐네. 왜 가능한 걸까?
for each문의 조건
java에서 "for each" 루프를 사용하여 반복할 수 있는 자료형은 다음과 같다:
- 배열 (Arrays)
- Iterable 인터페이스를 구현한 모든 컬렉션 클래스들 (ArrayList, LinkedList, HashSet, TreeSet 등)
- 맵(Map) 컬렉션의 경우에는 keySet(), values(), entrySet() 메서드로 얻은 컬렉션들이 for each 루프에서 사용 가능
여기서 "Iterable 인터페이스를 구현한 모든 컬렉션 클래스"에 Stack이 포함된다.
일단 컬렉션 클래스란, 데이터를 저장하고 관리하기 위해 여러 개의 요소를 담는 자료구조를 제공하는 리스트(List), 세트(Set), 큐(Queue), 맵(Map) 등의 클래스를 말한다. 이중 Iterable 인터페이스를 구현한 컬렉션 클래스는,
- ArrayList
- LinkedList
- HashSet
- LinkedHashSet
- TreeSet
- PriorityQueue
- ArrayDeque
- LinkedList
- Vector
- Stack
- Hashtable
- HashMap
- LinkedHashMap
- WeakHashMap
- ConcurrentHashMap
- TreeMap
- Properties
- EnumSet
- EnumMap
- Iterable 자신
등이 있다. 따라서 이 클래스들은 모두 향상된 for 루프(for-each 루프)를 사용할 수 있다.
'Study with me > 프로그래머스 L0 마스터하기' 카테고리의 다른 글
프로그래머스 - L0 조건에맞게수열변환하기2 (0) | 2024.04.11 |
---|---|
프로그래머스 - L0 이진수더하기 (0) | 2024.04.10 |
프로그래머스 - L0 리스트자르기 (0) | 2024.04.08 |
프로그래머스 - L0 2의영역 (0) | 2024.04.06 |
프로그래머스 - L0 한번만등장한문자 (0) | 2024.04.04 |