본문 바로가기
Study with me/프로그래머스 L0 마스터하기

프로그래머스 - L0 컨트롤제트

by 외계나무 2024. 4. 10.

프로그래머스 - level 0 컨트롤 제트

일단은 간단하게 풀었는데,

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" 루프를 사용하여 반복할 수 있는 자료형은 다음과 같다:

  1. 배열 (Arrays)
  2. Iterable 인터페이스를 구현한 모든 컬렉션 클래스들 (ArrayList, LinkedList, HashSet, TreeSet 등)
  3. 맵(Map) 컬렉션의 경우에는 keySet(), values(), entrySet() 메서드로 얻은 컬렉션들이 for each 루프에서 사용 가능

여기서 "Iterable 인터페이스를 구현한 모든 컬렉션 클래스"에 Stack이 포함된다.

일단 컬렉션 클래스란, 데이터를 저장하고 관리하기 위해 여러 개의 요소를 담는 자료구조를 제공하는 리스트(List), 세트(Set), 큐(Queue), 맵(Map) 등의 클래스를 말한다. 이중 Iterable 인터페이스를 구현한 컬렉션 클래스는,

  1. ArrayList
  2. LinkedList
  3. HashSet
  4. LinkedHashSet
  5. TreeSet
  6. PriorityQueue
  7. ArrayDeque
  8. LinkedList
  9. Vector
  10. Stack
  11. Hashtable
  12. HashMap
  13. LinkedHashMap
  14. WeakHashMap
  15. ConcurrentHashMap
  16. TreeMap
  17. Properties
  18. EnumSet
  19. EnumMap
  20. Iterable 자신

등이 있다. 따라서 이 클래스들은 모두 향상된 for 루프(for-each 루프)를 사용할 수 있다.