[프로그래머스] 같은 숫자는 싫어

이찬혁·2024년 3월 20일

알고리즘

목록 보기
23/72

프로그래머스 Lv1 - 같은 숫자는 싫어

스택을 활용하여 풀이한 알고리즘 문제로 주어진 배열을 거꾸로 순회하며(스택의 경우 순서가 뒤집힘)
스택이 비어있을 경우(첫 반복의 경우)는 스택에 값을 넣어주고, 그 이후 반복부터는 스택에 들어있는 값과 현재 배열 요소의 값을 비교하여 같지 않을 경우에만 스택에 값을 넣어주고, 반복이 끝나면 스택을 int[]형으로 변경하기 위해 스택의 값을 순차적으로 answer 배열에 넣는 방법으로 풀이를 완료했다..

풀이하고나서 아쉬운 점은 스택에 값을 넣는 첫번째 반복문에서 굳이 조건을 두개로 나누지 않고 하나의 조건안에서 처리가 가능할 것으로 보인다.

HateSameNumber.java

package com.example.Programmers.Lv1;

import java.util.Stack;

/**
 * 프로그래머스 Lv1 - 같은 숫자는 싫어
 */
public class HateSameNumber {
    public int[] solution(int[] arr) {
        Stack<Integer> stack = new Stack<>();
        for (int i = arr.length - 1; i >= 0; i--) {
            if (stack.isEmpty()) {
                stack.push(arr[i]);
            }
            int ele = stack.peek();
            if (ele != arr[i]) {
                stack.push(arr[i]);
            }
        }

        int[] answer = new int[stack.size()];

        for (int i = 0; !stack.isEmpty(); i++) {
            answer[i] = stack.pop();
        }

        return answer;
    }
}

HateSameNumberTest.java

package com.example.Programmers.Lv1;

import static org.junit.Assert.assertArrayEquals;

import org.junit.Test;

public class HateSameNumberTest {
    @Test
    public void testHateSameNumber() {

        HateSameNumber hsn = new HateSameNumber();
        int[] result1 = hsn.solution(new int[] { 1, 1, 3, 3, 0, 1, 1 });
        int[] result2 = hsn.solution(new int[] { 4, 4, 4, 3, 3 });

        assertArrayEquals(new int[] { 1, 3, 0, 1 }, result1);
        assertArrayEquals(new int[] { 4, 3 }, result2);

    }
}
profile
나의 개발로그

0개의 댓글