Contents

같은 숫자는 싫어 (with.Java)

   Jun 5, 2024     3 min read

“같은 숫자는 싫어 (with.Java)” 문제에 대하여 알아본 글입니다.

코딩 테스트 문제를 풀며, 풀었던 문제에 대한 회고와 다른 풀이 방법을 알아보며, 알아가고자 합니다.

문제에 대해 먼저 알아보겠습니다.

문제

배열 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보다 작거나 같은 정수

입출력 예시

arranswer
[1,1,3,3,0,1,1][1,3,0,1]
[4,4,4,3,3][4,3]

문제에 대한 나의 풀이

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        Stack<Integer> stack = new Stack<Integer>();
        stack.push(arr[0]);
        for(int i = 1; i < arr.length; i++){
            if(stack.peek() != arr[i]){
                stack.push(arr[i]);
            }
        }

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

        return answer;
    }
}

풀이 리뷰

solution 메서드는 정수 배열 arr을 입력으로 받습니다.

중복된 값을 제거하고 순서를 유지하기 위해 Stack 객체 stack을 생성합니다.

stack에는 주어진 배열의 첫 번째 요소를 추가합니다.

이는 중복된 값을 제거하는 과정에서 첫 번째 요소는 중복이 없는 값으로 처리되기 때문입니다.

두 번째 for 루프에서는 배열을 순회하면서 stack의 맨 위 요소와 현재 값이 다른 경우에만 stack에 추가합니다. 이렇게 하면 중복된 값을 제거할 수 있습니다.

중복된 값이 제거된 후, stack에 저장된 값을 배열에 넣을 때는 pop() 메서드를 사용하여 역순으로 값을 꺼내어 저장합니다.

마지막으로 역순으로 저장된 배열을 반환합니다.

이 코드는 중복된 값을 제거하고 순서를 유지하기 위해 스택을 사용하여 중복된 값을 하나만 남기고 나머지는 제거하는 방법을 사용합니다.

배열로도 풀어보겠습니다.

문제에 대한 나의 풀이

import java.util.*;

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

        int[] answer = new int[list.size()];
        for(int i = 0; i < answer.length; i++){
            answer[i] = list.get(i);
        }

        return answer;
    }
}
풀이 리뷰

solution 메서드는 정수 배열 arr을 입력으로 받습니다.

중복된 값을 제거한 결과를 저장하기 위해 ArrayList 객체 list를 생성합니다.

list에는 주어진 배열의 첫 번째 요소를 추가합니다. 이는 중복된 값을 제거하는 과정에서 첫 번째 요소는 중복이 없는 값으로 처리되기 때문입니다.

두 번째 for 루프에서는 배열을 순회하면서 이전 값과 현재 값이 다른 경우에만 list에 추가합니다. 이렇게 하면 중복된 값을 제거할 수 있습니다.

마지막으로 list에 저장된 값을 배열로 변환하여 반환합니다.

이 코드는 중복된 값을 제거하기 위해 ArrayList를 사용하여 중복된 값을 하나만 남기고 나머지는 제거하는 간단한 방법을 사용합니다.