|
배열 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보다 작거나 같은 정수
[입출력 예]

추측)
String을 이용하면 int Array > String > int Array 로 형변환이 일어나고
ArrayList면 int Array > ArrayList > int Array로 형변환 일어나고..
형 변환 자체 횟수는 동일하나, String이나 ArrayList 중 어느쪽이 더 효율적인가..
for문을 돌려 배열의 값을 하나하나 출력하는데 이때 카운트를 집어넣어 같은 값일때는 카운트를 올리고 문자열에는 추가하지 않는다. 같은 값이 아니라면 카운트를 초기화한다.
소스코드)
* 1차) 실패 - 결과값은 전부성공했으나 효율성 테스트에서 떨어진 케이스
public int[] solution(int []arr) {
int[] answer = {};
String result = "";
for(int i=0; i<arr.length; i++){ // Arrays.asList() 가 사람들처럼 안나와..
if(i == 0){
result += Integer.toString(arr[i]);
continue;
}
if(arr[i-1] == arr[i]){
continue;
} else {
result += Integer.toString(arr[i]);
}
}
answer = new int[result.length()];
for(int j=0; j<result.length(); j++){
answer[j] = Integer.parseInt(result.substring(j,j+1));
}
return answer;
}
* 2차) 성공 - 충격 String에서 변환하는 게 더 효율성이 안좋은 것 같다. 흐름은 바꾸지 않고 ArrayList로만 바꿔서 했는데 통과했다.
public int[] solution(int []arr) {
int[] answer = {};
ArrayList<Integer> arr1 = new ArrayList<Integer>();
for(int i=0; i<arr.length; i++){
if(i==0){
arr1.add(arr[0]);
} else {
if(arr[i-1] != arr[i]){
arr1.add(arr[i]);
}
}
}
answer = new int[arr1.size()];
for(int j=0; j<answer.length; j++){
answer[j] = arr1.get(j);
}
return answer;
}
리뷰)
형변환에 따른 효율성을 비교를 잘해야 할 거 같다. 효율성 비교할 수 있는 방법을 찾아보자.
'Coding Test > Algorithm' 카테고리의 다른 글
| Programmers] 모의고사 (0) | 2022.11.21 |
|---|---|
| Programmers] 최소직사각형 (0) | 2022.11.21 |
| Programmers] 로또의 최고 순위와 최저 순위 (0) | 2022.11.21 |
| Programmers] 두 개 뽑아서 더하기 (0) | 2022.11.21 |
| Programmers] 3진법 뒤집기 (0) | 2022.11.19 |




