Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

luke

[프로그래머스] - 같은 숫자는 싫어 (자바/Java) 본문

알고리즘문제/프로그래머스(Java)

[프로그래머스] - 같은 숫자는 싫어 (자바/Java)

luke-king 2024. 4. 26. 16:59

 

 

 

 

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

 

풀이.


 

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        
        Stack<Integer> st = new Stack<>();

        for (int i = 0; i < arr.length; i++) {
            if (i == 0) {
                st.push(arr[i]);
            }
            if (st.peek() != arr[i]) {
                st.push(arr[i]);
            }
        }

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

        for (int i = st.size() - 1; i >= 0; i--) {
            answer[i] = st.pop();
        }

        return answer;
    }
}

 

이번 문제는 프로그래머스의 " 같은 숫자는 싫어 " 문제이다.

이 문제는 스택 구조로 접근할 거다. 처음 자바를 접하게 되면 힙, 스택, 큐 구조를 배우게 되는데 그 부분에서는 다음에 따로 한번 정리해 볼 예정이다.

그럼 바로 풀이를 해보겠다.

 

1. 우선 Integer를 담는 스택 구조를 만들어 준다.

( 여기서 간단하게 설명하자면 스택 구조는 후입선출 구조이다. 즉 먼저 들어온 데이터는 나중에 빠져나가는 구조라는 것이다. 자세한 설명은 조만간 정리해서 올려 보겠다.)

 

2. 배열의 길이만큼 for문을 돌려준다. 다음 첫번째 조건식에 첫 번째 숫자를 stack구조에 넣어 준다.

 

3. 다음 조건식에는 index 1번 부터는 stack의 마지막 요소의 값들을 arr배열과 비교해 일치 여부를 확인한다.

 

4. 일치하지 않을경우 stack구조에 push로 해당 값을 넣어 준다.

 

5. 리턴 받을 answer의 변수 크기 지정은 stack에 담겨있는 사이즈만큼으로 초기화해준다.

 

6. 마지막으로 최종 값들을 출력하기 위해 for문을 돌려준다. 하지만 주의할 점이 있다. stack의 구조는 후입선출 구조이기에 역순으로 담아 일반 for문 돌릴 때와 다르게 역순으로 돌려줘야 한다.