본문 바로가기

개발/JAVA

[JAVA] level1. 같은 숫자는 싫어

 

이 문제를 풀고 나서 더 간단한 다른 풀이를 찾다가 추상클래스와 인터페이스, ArrayList, ListIterator 까지 많은 것을 공부하고왔다.

2019/11/20 - [자바/기본 개념] - List와 ArrayList / ArrayList와 Array
2019/11/20 - [자바/기본 개념] - 추상클래스와 인터페이스 / 상속과 다형성

 

우선 문제는 간단하다.

배열 arr 가 주어지는데, 연속으로 중복된 element 는 하나만 남기고 전부 제거해 배열 answer 에 넣으면  끝!

arr = [1,1,3,3,0,1,1] 이면, answer = [1,3,0,1] 이 될 것이고,

arr = [4,4,4,3,3] 이면, answer = [4,3] 이 될 것이다.

public class solution {

   public static void main(String[] args) {

   // TODO Auto-generated method stub

      int[] arr = {1,1,3,3,0,1,1};

      int tmp = 1;                                 //배열 answer 의 크기 변수, arr 의 첫번째 원소는 무조건 넣기 때문에 0이 아닌 1로 초기화

      for(int k=0; k<arr.length-1;k++) {

         if(arr[k] != arr[k+1]) {               //연속으로 같은 element 가 나오지 않았다면 tmp +1

            tmp ++;

         }

      }

      int[] answer = new int[tmp];     //tmp 크기 만큼 배열 answer 선언

      answer[0] = arr[0];                   //첫번째 원소는 무조건 넣기, answer[0] = 1

      tmp = 1;                                     //배열 answer 의 인덱스 1 부터 값을 넣기 위해 tmp = 1 로 초기화

      for(int j=0; j<arr.length-1;j++) {

         if(arr[j] != arr[j+1]) {

            answer[tmp] = arr[j+1];

            tmp++;

         }

      }

      for(int i:answer) {

         System.out.print(i);

      }

   }

}

이렇게 문제 해결!

 


 

Array 가 아닌 ArrayList 를 사용한 간단 풀이도 찾을 수가 있었다.

public class solution {

   public static void main(String[] args) {

      int[] arr = {1,1,3,3,0,1,1};

      List<Integer> list = new ArrayList<>();                    //answer 

      if(arr.length>0)

         list.add(arr[0]);                                                      //첫번째 원소 무조건 넣기

     

      for(int i=1; i<arr.length; i++) {

         //list 에 들어가있는 가장 마지막 값과 arr 원소 하나씩 비교

         //같지 않으면 list 에 추가 

         if(!list.get(list.size()-1).equals(arr[i])) {

           list.add(arr[i]);

         }

      }

      int[] answer = new int[list.size()];                            //값 넣어둔 list 크기 만큼 answer 배열 선언  

      for(int i=0; i<answer.length; i++) {                          //값 하나씩 answer 배열에 넣기 

         answer[i] = list.get(i);

      }

      for(int i : answer) {

         System.out.print(i);

      }

   }

}

이렇게 ArrayList 의 메소드를 활용해서 간단히 구현할 수 도 있다.

 

 

참고

https://blog.naver.com/PostView.nhn?blogId=yongyos&logNo=221473609669