Coding Test/Java Coding Test

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

nam_ji 2024. 8. 21. 10:42

같은 숫자는 싫어 - LV. 1

문제

  • 정수 배열 arr이 매개변수로 주어집니다.
  • arr의 원소는 0 ~ 9까지의 숫자로 이루어져 있습니다.
  • 배열의 연속적으로 나타나는 숫자 하나만 남기고 전부 제거하려고 합니다.
  • 반환 시 arr 원소의 순서를 유지해야 합니다.
  • 입출력 예
    • arr result
      [1,1,3,3,0,1,1] [1,3,0,1]
      [4,4,4,3,3] [4,3]


테스트 (인텔리제이)

  • answer의 타입을 list로 수정하고 arr의 첫 번째 원소를 넣어줍니다.
  • 이제 for문으로 arr의 크기만큼 순회하도록 설정하고
  • if문으로 answer의 마지막 원소가 arr의 원소와 같은 값이 아니라면 answer에 추가하도록 하여 해결했습니다.
  • 두 번째 풀이는 다른 사람 풀이에서 반환 타입을 수정하지 않고 푼 풀이여서 가져와 봤습니다.
  • preNum이라는 int 변수와 List 배열을 선언해줍니다.
  • for문으로 arr의 값을 하나씩 꺼내서
  • if문으로 preNum과 arr의 원소를 비교합니다. preNum과 다르다면 List 배열에 arr의 원소를 추가하고 해당 원소를 preNum에 저장합니다. 이렇게 List 배열을 완성하고
  • int[] 배열을 List 배열의 크기만큼이 되도록 선언해줍니다.
  • for문으로 List 배열의 크기만큼 순회하도록 하고 answer에 List 배열의 원소를 하나씩 추가해주면 됩니다.
package com.namji.codingtest;

import org.springframework.expression.spel.ast.Literal;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class 같은_숫자는_싫어 {
  public static void main(String[] args) {
    /*
    정수 배열 arr이 매개변수로 주어집니다.
    arr의 원소는 0 ~ 9까지의 숫자로 이루어져 있습니다.
    배열의 연속적으로 나타나는 숫자 하나만 남기고 전부 제거하려고 합니다.
    반환 시 arr 원소의 순서를 유지해야 합니다.

    입출력 예
    arr	            answer
    [1,1,3,3,0,1,1]	[1,3,0,1]
    [4,4,4,3,3]	    [4,3]

    입출력 설명
    #1
    arr = [1, 1, 3, 3, 0, 1, 1] 이면
    [1, 3, 0, 1] 을 return 합니다.
    #2
    arr = [4, 4, 4, 3, 3] 이면
    [4, 3] 을 return 합니다.
     */
//    int[] arr = {1,1,3,3,0,1,1};
//    List<Integer> answer = new ArrayList<>();
//    answer.add(arr[0]);
//
//    for (int i = 0; i < arr.length; i++) {
//      if (answer.get(answer.size() - 1) != arr[i]) {
//        answer.add(arr[i]);
//      }
//    }
//    System.out.println(answer);

    int[] arr = {1,1,3,3,0,1,1};
    List<Integer> list = new ArrayList<>();
    int preNum = 10;

    for (int num : arr) {
      if (preNum != num) {
        list.add(num);
      }
      preNum = num;
    }

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

    System.out.println(Arrays.toString(answer));
  }
}

프로그래머스 코드

// import java.util.*;

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

//         return answer;
//     }
// }

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        List<Integer> list = new ArrayList<>();
        int preNum = 10;
        
        for (int num : arr) {
            if (preNum != num) {
                list.add(num);
            }
            preNum = num;
        }
        
        int[] answer = new int[list.size()];
        
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }

        return answer;
    }
}

왼쪽 : 첫 번째 풀이 / 오른쪽 : 두 번째 풀이