반응형
[프로그래머스] Java 코딩테스트 연습 - 2의 영역
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/181894
문제
정수 배열 arr가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr에 2가 없는 경우 [-1]을 return 합니다.
풀이
배열의 첫 번째 2의 인덱스를 담을 firstIndex와 마지막 2의 인덱스를 담을 lastIndex를 선언하고 초기값을 -1로 설정했다. 0으로 초기화했더니 몇몇 테스트에서 런타임 에러가 났다. -1이 '찾지 못했음'이나 '아직 값이 설정되지 않았음'을 나타내는 관행적인 값이라고 해서 -1을 넣었는데 해결됐다,,
for문으로 arr을 순회하다가 2가 발견되면 firstIndex에 해당 위치를 담고 break했다.
그 다음에 firstIndex가 -1이 아니라면 다시 for문으로 firstIndex부터 arr을 순회하고 2가 발견되면 lastIndex에 담았다.
answer의 크기가 어느정도일지 알 수 없기 때문에 ArrayList를 사용했다.
firstIndex가 -1이라면 2를 찾지 못 했다는 뜻이므로 list에 -1을 담고, firstIndex와 lastIndex가 같다면 2가 한 개만 있다는 뜻이므로 2를, 그 외에는 firstIndex와 lastIndex 사이에 위치한 arr의 원소들을 list에 담았다.
list의 크기만큼 answer배열의 크기를 설정하고 list에 저장된 원소들을 asnwer에 복사하여 return했다.
소스코드
import java.util.List;
import java.util.ArrayList;
class Solution {
public int[] solution(int[] arr) {
int firstIndex = -1;
int lastIndex = -1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 2) {
firstIndex = i;
break;
}
}
if (firstIndex != -1) {
for (int i = firstIndex; i < arr.length; i++) {
if (arr[i] == 2) {
lastIndex = i;
}
}
}
List<Integer> list = new ArrayList<>();
if (firstIndex == -1) {
list.add(-1);
} else if (firstIndex == lastIndex) {
list.add(2);
} else {
for (int i = firstIndex; i <= lastIndex; i++) {
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;
}
}
반응형
'코딩테스트연습 > [프로그래머스] Java' 카테고리의 다른 글
[프로그래머스] Java 코딩테스트 연습 - 이진수 더하기 (0) | 2023.08.12 |
---|---|
[프로그래머스] Java 코딩테스트 연습 - 한 번만 등장한 문자 (0) | 2023.08.10 |
[프로그래머스] Java 코딩테스트 연습 - 가까운 수 (0) | 2023.08.08 |
[프로그래머스] Java 코딩테스트 연습 - 이차원 배열 대각선 순회하기 (0) | 2023.08.07 |
[프로그래머스] Java 코딩테스트 연습 - 주사위 게임 3 (0) | 2023.08.06 |