알고리즘/Java

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

유리코딩 2021. 11. 11. 12:05
반응형

알고리즘

JAVA 프로그래머스 같은 숫자는 싫어


 

1. 문제

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

 

2. 풀이

크게 어려운 개념은 없었지만 for문, if문이 헷갈려서 정리해봤다. 원래는 배열의 앞뒤숫자를 비교해서 푸는 방법으로 먼저풀려고 했는데 잘 되지 않았다. 다른풀이로 다시 공부!

import java.util.*;

class Solution {
    public int[] solution(int []arr) {
		// int[] arr = {1,1,3,3,0,1,1};

        ArrayList<Integer> tempList = new ArrayList<Integer>();
        int preNum = 10; //10이상의 숫자 아무거나(arr 원소가 9이하라서)

          //아래for문과 같음
//        for (int num : arr) {
//            if (preNum != num)
//                tempList.add(num);
//            preNum = num;
//        }
		// tempList list에 넣어주기
        for(int i=0; i<arr.length; i++) {
            if(preNum != arr[i])
                tempList.add(arr[i]);
            preNum = arr[i];
        }
//       -------------------------------------
//      |     arr = {1, 1, 3, 3, 0, 1, 1};   |
//      |       i =  0, 1, 2, 3, 4, 5, 6     |
//      |  preNum =  1, /, 3, /, 0, 1, /     |
//       -------------------------------------

//        System.out.println(tempList);    [1,3,0,1]

		// list에서 배열로 변환
        int[] answer = new int[tempList.size()];
        for(int i=0; i<answer.length; i++) {
            answer[i] = tempList.get(i);
        }

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

 

[다른사람의 풀이]

더 비효율적일 수도 있지만 풀려고 시도했던 풀이법으로 못풀면 답답....

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        int[] answer ;
        int count = 1;

        for(int i=1; i<arr.length; i++){
            if(arr[i-1] != arr[i])
                count++;
        }
        answer = new int[count];

        count=1;

        answer[0] = arr[0];
        for(int i=1; i<arr.length; i++){
            if(arr[i-1] != arr[i]){
                answer[count] = arr[i];
                count++;
            }
        }


        return answer;
    }
}
반응형