-
프로그래머스 - 같은 숫자는 싫어알고리즘 2022. 6. 14.반응형
내 풀이
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; } }
반응형'알고리즘' 카테고리의 다른 글
프로그래머스 - 다트 게임 [2018 KAKAO BLIND RECRUITMENT] (0) 2022.06.28 프로그래머스 - 가운데 글자 가져오기 (0) 2022.06.26 프로그래머스 - 나누어 떨어지는 숫자 배열 (0) 2022.06.13 프로그래머스 - 두 정수 사이의 합 (0) 2022.06.11 프로그래머스 - 문자열 내 p와 y의 개수 (0) 2022.06.09