๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฉ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๐Ÿต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(Java)

[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java ] ๊ฐ™์€ ์ˆซ์ž๋Š” ์‹ซ์–ด

by carrot0911 2025. 3. 27.

๋ฌธ์ œ ์„ค๋ช…

https://school.programmers.co.kr/learn/courses/30/lessons/12906

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

๋ฐฐ์—ด arr๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋ฐฐ์—ด arr์˜ ๊ฐ ์›์†Œ๋Š” ์ˆซ์ž 0๋ถ€ํ„ฐ 9๊นŒ์ง€๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ, ๋ฐฐ์—ด arr์—์„œ ์—ฐ์†์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์ˆซ์ž๋Š” ํ•˜๋‚˜๋งŒ ๋‚จ๊ธฐ๊ณ  ์ „๋ถ€ ์ œ๊ฑฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ์ œ๊ฑฐ๋œ ํ›„ ๋‚จ์€ ์ˆ˜๋“ค์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ๋Š” ๋ฐฐ์—ด arr์˜ ์›์†Œ๋“ค์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด,

  • arr = [1, 1, 3, 3, 0, 1, 1] ์ด๋ฉด [1, 3, 0, 1] ์„ return ํ•ฉ๋‹ˆ๋‹ค.
  • arr = [4, 4, 4, 3, 3] ์ด๋ฉด [4, 3] ์„ return ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด arr์—์„œ ์—ฐ์†์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์ˆซ์ž๋Š” ์ œ๊ฑฐํ•˜๊ณ  ๋‚จ์€ ์ˆ˜๋“ค์„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • ๋ฐฐ์—ด arr์˜ ํฌ๊ธฐ : 1,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • ๋ฐฐ์—ด arr์˜ ์›์†Œ์˜ ํฌ๊ธฐ : 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ  9๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜

์ž…์ถœ๋ ฅ ์˜ˆ

arr answer
[1, 1, 3, 3, 0, 1, 1] [1, 3, 0, 1]
[4, 4, 4, 3, 3] [4, 3]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1,2

  • ๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        int[] answer = {};
        
        // ์ˆซ์ž๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ์„ ์ƒ์„ฑ
        Stack<Integer> stack = new Stack<>();
        // ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์Šคํƒ์— ์ €์žฅ
        stack.push(arr[0]);
        
        // ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ์ˆซ์ž ํ™•์ธ
        for(int num : arr) {
            // ๋งŒ์•ฝ ์Šคํƒ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๊ฐ’๊ณผ num์ด ๊ฐ™์ง€ ์•Š์€ ๊ฒฝ์šฐ
            if (stack.peek() != num) {
                // ์Šคํƒ์— ๊ฐ’ ์ €์žฅ
                stack.push(num);
            }
        }
        
        // ์Šคํƒ์˜ ๊ธธ์ด์™€ ๊ฐ™์€ answer ์ƒ์„ฑ
        answer = new int[stack.size()];
        
        // ๋ณ€์ˆ˜ k์— (์Šคํƒ ๊ธธ์ด - 1) ์ €์žฅ
        int k = stack.size() - 1;
        
        // ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉ
        while (!stack.isEmpty()){
            // ์Šคํƒ์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ €์žฅ
            answer[k--] = stack.pop();
        }
        
        // answer ๋ฐ˜ํ™˜
        return answer;
        
    }
}

๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ƒ๊ฐํ•œ ๋ฐฉํ–ฅ

  • ์Šคํƒ์„ ์‚ฌ์šฉํ•ด์„œ ์ˆซ์ž ์ €์žฅํ•˜๊ธฐ
  • answer์— ์Šคํƒ์— ์ €์žฅ๋œ ๊ฐ’ ์ €์žฅํ•˜๊ธฐ
  • pop(), peek() ์ž˜ ๊ตฌ๋ถ„ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ