<상황> 알고리즘 문제를 풀다가 길이가 없는 빈 배열을 어떻게 길이가 정해진 배열로 변환하는지 궁금했다.
<조사> 알고리즘 문제에서 빈 배열이 주어지고, 해당 배열에 문제 풀이 결과를 담아 반환해야 할 때, 리스트를 사용하여 문제를 해결한 뒤 리스트를 배열로 변환한다는 것을 발견했다. 관련 문제는 아래 접은글 참조
더보기
더보기
문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
- arr은 자연수를 담은 배열입니다.
- 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
- divisor는 자연수입니다.
- array는 길이 1 이상인 배열입니다.
정답 템플릿
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer = {};
return answer;
}
}
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer = {};
List<Integer> list = new ArrayList<>();
for(Integer num:arr){
if(num % divisor == 0){
list.add(num);
}
}
if(list.isEmpty())
list.add(-1);
Collections.sort(list);
answer = list.stream() //핵심!
.mapToInt(Integer:intValue)
.toArray();
return answer;
}
}
<인사이트> 배열 변수명은 단순히 해당 배열을 가리키는 포인터에 불과하므로, 필요한 배열을 생성한 뒤 이를 해당 변수가 가리키도록 바꿔주면, 마치 배열을 바꾼 것과 같은 효과를 낼 수 있다.
예를 들어
int[] arr = {}; -> arr라는 정수형 배열 변수는 빈 배열의 주소를 가리키고 있지만
arr = new int[] {1, 2, 3, 4}; -> 여기선 {1,2,3,4}라는 새로운 배열의 주소를 가리키게 된다.
기존 배열 {}이 {1,2,3,4}로 바뀌는 것이 아니라, arr라는 변수가 가리키는 포인터 값(주소값)만 변하는 것이다.
나는 이 점을 간과하여, answer의 선언 위치를 이리저리 바꿔보려 했었다.
느낀 점
CS 기초가 많이 빈약하다는 생각이 드는 요즘이다. 자료구조, SQL, 알고리즘을 오랜 기간 공부했지만 결국 써먹을 수 있으려면 반복 숙달을 통해 실무에 적용할 수 있어야 한다. 지금까지의 전략은 기초는 가볍게, 다양한 문제 풀이를 통해 기초를 여러 차례 다시 복기함으로써 다양한 문제 유형에 대한 감각을 익히는 것이었다. 하지만 이제 전략을 수정해야 한다. 기초를 수 차례 반복하여 완전히 내 것으로 만들고, 하나의 문제를 다양한 기초 지식을 동원하여 최대한 다양하게 풀어보면서 기초를 탄탄하게 다지는 전략으로 피벗팅하자. 기본 자료구조부터 시작해서 람다, 스트림, 제네릭까지 자바의 뼈대가 되는 기본기들을 완전 내것으로 흡수한다면 그 어떠한 variation에도 대처할 수 있을 것이다.
오늘의 한줄평
강함이란, 유연함이다
強さとは、しなやかさ
'Java' 카테고리의 다른 글
| [자료구조] 자료구조의 크기 쉽게 계산하기 (0) | 2026.02.20 |
|---|