본문 바로가기
JAVA/Programmers

JAVA 프로그래머스 [같은 숫자는 싫어] 자바 Lv.1

by tripleup 2023. 8. 10.
728x90
반응형

[프로그래머스] 코딩테스트 연습 -> 스택/큐 -> 같은 숫자는 싫어

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


해결 과정

 

세 개의 해결법을 찾았으므로 소스 코드와 함께 해결과정을 살펴보자.

 

소스 코드

 

(1) List형을 int배열로 변환

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        List<Integer> list = new ArrayList();
        
        int tmp = -1;
        for (int i=0; i<arr.length; i++) {
            if (tmp != arr[i]) {
                list.add(arr[i]);
                tmp = arr[i];
            }
        }
        int[] answer = new int[list.size()];
        for(int i = 0; i<list.size();i++){
            answer[i] = list.get(i);
        }
        System.out.println(answer);
        
        return answer;
    }
}

 

(2) return 값을 List<Integer>로 변환

import java.util.*;

public class Solution {
    public List<Integer> solution(int []arr) {
        List<Integer> answer = new ArrayList<>();
        
        int tmp = -1;
        for (int i=0; i<arr.length; i++) {
            if (tmp != arr[i]) {
                answer.add(arr[i]);
                tmp = arr[i];
            }
        }
        return answer;
    }
}

 

이렇게 하면 (1)에서 ArrayList의 값을 int 배열에 넣는 과정을 없앨 수 있다.


(3) Stack 사용

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        Stack<Integer> stack = new Stack<>();
        
        for(int i : arr) {
            if(stack.isEmpty()) {
                stack.push(i);
            }else if(stack.peek() != i) {
                stack.push(i);
            }
        }
        
        int[] answer = new int[stack.size()];
        for(int i= stack.size()-1;i>=0;i--) {
            answer[i] = stack.pop();
        }
        
        return answer;
    }
}

 

peek(i) 는 스택에서 꺼내는 것이고 push(i) 는 스택에 넣는 것이다.

 


728x90
반응형

댓글