728x90
반응형
[문제 링크]
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
배열 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 함수를 완성해 주세요.
📍 코드
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
List<Integer> list = new ArrayList<>();
Integer pre = null; // 이전 값 (아직 값 없으므로 Null)
for(int a: arr){
if(pre == null || a != pre) list.add(a);
pre = a; // 이전 값 갱신
}
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
💡 접근법
- 배열의 값을 하나씩 비교하며 숫자가 연속되면 값을 넣지 않는다.
ArrayList사용list에 아직 값이 없으므로 이전 값(pre)은 null로 초기화- 배열을 돌며 이전 값이 null 이거나 현재 값 != 이전 값이면 리스트에 값 추가
- 이전 값을 그 다음 값으로 갱신
- list를 int[]로 변환하여 반환하면 답이다.
stream()→ 리스트를 스트림화mapToInt(Integer::intValue)→ Integer → int 변환 + 기본형 특화 스트림toArray()→int[]로 변환
📍 문제를 대충 읽은 경우...
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
Set<Integer> set = new LinkedHashSet<>();;
for(int a: arr) set.add(a);
return set.stream().mapToInt(Integer::intValue).toArray();
}
}
- 단지 중복을 제거하라는 것인 줄 알았다는 이야기...
코테 문제뿐만 아니라 일반 시험을 치룰 때도
문제를 대충 읽어서 실수한 적이 많다...🥲
그렇다면 실수가 아닌거겠지만.. 이 부분도 고쳐나갈 부분인 것 같다.
728x90
반응형
