알고리즘
프로그래머스 - 같은 숫자는 싫어
Heidong
2022. 6. 14. 13:49
반응형
내 풀이
public int[] solution(int []arr) {
List<Integer> ans = new ArrayList<>();
for(int x : arr) {
ans.add(x);
}
int cnt = 0;
while(cnt < ans.size()) {
if((cnt+1) == ans.size()) break;
if(ans.get(cnt) == ans.get(cnt + 1)) {
ans.remove(cnt);
cnt = 0;
continue;
}
cnt++;
}
return ans.stream().mapToInt(x -> x).toArray();
}
코드는 조건에 맞게 작동을 하지만 효율성 테스트에서 실패가 나왔다.
알아본 결과 배열에서 삭제 방식으로 푸는 것은 좋지 않다고 한다.
그래서 배열에 추가하는 방식으로 다시 풀어 보았다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class P_29 {
public int[] solution(int []arr) {
List<Integer> ans = new ArrayList<>();
int cnt = 0;
ans.add(arr[0]);
for(int i = 0; i<arr.length; i++) {
if(i+1 == arr.length) break;
if(ans.get(cnt) == arr[i+1]) {
continue;
}
ans.add(arr[i+1]);
cnt++;
}
return ans.stream().mapToInt(x -> x).toArray();
}
public static void main(String[] args) {
// 같은 숫자는 싫어
P_29 p = new P_29();
int[]arr = {4,4,4,3,3};
int[]ans = p.solution(arr);
System.out.println(Arrays.toString(ans));
}
}
추가 방식으로 하면서 for문 하나로 해결이 가능했다.
다른 사람 풀이
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
ArrayList<Integer> tempList = new ArrayList<Integer>();
int preNum = 10;
for(int num : arr) {
if(preNum != num)
tempList.add(num);
preNum = num;
}
int[] answer = new int[tempList.size()];
for(int i=0; i<answer.length; i++) {
answer[i] = tempList.get(i).intValue();
}
return answer;
}
}
intValue() 메소드를 사용하는 이유는 Integer 값의 반환을 int로 바꾸기 위함.
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
List<Integer> list = new ArrayList<Integer>();
list.add(arr[0]);
for (int i = 1; i < arr.length; i++) {
if (arr[i] != arr[i - 1])
list.add(arr[i]);
}
int[] answer = new int[list.size()];
for (int i = 0; i < list.size(); i++)
answer[i] = list.get(i);
return answer;
}
}
반응형