JAVA/Algorithm

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

nang. 2020. 10. 23. 22:09
반응형
SMALL

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

 

코딩테스트 연습 - 같은 숫자는 싫어

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은

programmers.co.kr

 

// 1. 임의의 숫자와 비교하여 없으면 넣고 있으면 패스하는 방식의 코드
import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        int[] answer = {};
        
        ArrayList<Integer> arrayList = new ArrayList<>();
        
        int temp = -1; // 배열의 숫자는 0~9라고 했으므로 -1이 나올 일은 절대 없으니까
        
        for(int i : arr) {
            if(temp == i) { // 임의의 temp 값과 배열의 값이 같다면 패스
                continue;
            } else { // 다르다면 arrayList에 넣어주기
                arrayList.add(i);
                temp = i; // 그리고 넣었다는 표시로 i 값을 temp에 갱신
            }
        }
        
        answer = new int[arrayList.size()];
        
        for(int i = 0; i < arrayList.size(); i++) {
            answer[i] = arrayList.get(i);
        }
        
        return answer;
    }
}


// 2. 같지않으면 배열에 추가추가 쉽게하려고 String 배열 썼다가 Integer 배열로 변경하는 코드
// 이 방법은 효율성 탈락
import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        StringBuilder sb = new StringBuilder(); 
        int size = arr.length;
        
        sb.append(arr[0]);
        
        for(int i = 1; i < size; i++) {
            if(arr[i-1] != arr[i]) {
                sb.append(arr[i]);
            }
        }
        
        String[] str_array = sb.toString().split("");
        size = str_array.length;
        
        int[] answer = new int[size];
        
        for(int i = 0; i < size; i++) {
            answer[i] = Integer.parseInt(str_array[i]);
        }
        
        return answer;
    }
}

// HashSet을 안하는 이유?
// HashSet은 아예 중복값을 없애버리고 정렬까지 해버리니까!
// 이 문제는 중복 제거만이 아니라 연속된 부분의 중복 부분을 제거하는거고 정렬도 안하는 문제!
반응형
LIST