본문 바로가기

프로그래머스(Java)/Level 0

[프로그래머스] 컨트롤 제트

728x90

코드 힌트

  1. 스택을 활용한 문제 해결:
    • 스택은 LIFO(Last In, First Out) 방식으로 작동하므로, 최근에 추가된 요소를 쉽게 제거할 수 있습니다. "Z"는 최근에 추가된 숫자를 제거하라는 의미이므로, 스택을 사용하여 이를 간단히 처리할 수 있습니다.
  2. 숫자와 명령어 구분:
    • 문자열을 공백으로 나눈 후, 각 단어가 숫자인지 "Z"인지 구분하여 처리합니다. "Z"는 스택에서 마지막 숫자를 제거하고, 숫자는 스택에 추가합니다.

 

  1. 배열을 활용한 간단한 접근:
    • 배열을 사용하면 각 요소에 직접 접근하고 수정할 수 있으므로, "Z"가 있는 경우 간단히 이전 숫자를 "0"으로 변경하여 처리할 수 있습니다.
  2. 공백으로 분할 후 처리:
    • 공백으로 문자열을 분할하여 각 요소를 배열로 변환한 후, "Z"에 따라 이전 요소를 변경하는 방법은 간단한 문자열 조작을 포함합니다.

 


정답은 더보기 클릭

더보기

Stack 정답

import java.util.*;

class Solution {
    public int solution(String s) {
        // 최종 결과를 저장할 변수 초기화
        int result = 0;
        
        // 숫자를 저장할 Stack 초기화
        Stack<Integer> stack = new Stack<>();
        
        // 문자열을 공백으로 분할하여 각 단어 처리
        for (String str : s.split(" ")) {
            if (str.equals("Z") && !stack.isEmpty()) {
                // "Z"를 만나면 스택에서 마지막 요소 제거
                stack.pop();
            } else {
                // 숫자를 스택에 추가
                stack.push(Integer.parseInt(str));
            }
        }
        
        // 스택에 남아 있는 모든 숫자를 합산하여 결과 계산
        while (!stack.isEmpty()) {
            result += stack.pop();
        }
        
        return result;
    }
}

 

배열 정답

class Solution {
    public int solution(String s) {
        // 최종 결과를 저장할 변수 초기화
        int result = 0;
        
        // 문자열을 공백으로 분할하여 배열로 변환
        String[] arr = s.split(" ");
        
        // "Z"를 처리하여 이전 숫자를 0으로 대체
        for (int i = 0; i < arr.length; i++) {
            if (arr[i].equals("Z")) {
                // "Z"를 만나면 이전 숫자를 0으로 변경
                arr[i - 1] = "0";
                arr[i] = "0";
            }
        }
        
        // 배열의 모든 숫자를 합산하여 결과 계산
        for (int i = 0; i < arr.length; i++) {
            result += Integer.parseInt(arr[i]);
        }
        
        return result;
    }
}

 

728x90