목차
#1 2의 영역
문제 설명
정수 배열 arr가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr에 2가 없는 경우 [-1]을 return 합니다.
제한사항
- 1 ≤ arr의 길이 ≤ 100,000
- 1 ≤ arr의 원소 ≤ 10
입출력 예
arr | result |
{1, 2, 1, 4, 5, 2, 9} | {2, 1, 4, 5, 2} |
{1, 2, 1} | {2} |
{1, 1, 1} | {-1} |
{1, 2, 1, 2, 1, 10, 2, 1} | {2, 1, 2, 1, 10, 2} |
#2 알고리즘 및 코드
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int[] arr) {
boolean check = false;
int start = 0, end = 0;
List<Integer> list = new ArrayList<>();
for(int i = 0; i < arr.length; i++){
if(arr[i] == 2 && !check) {
start = i;
check = !check;
}else if(arr[i] == 2 && check){
end = i;
} else if(end == 0) {
end = start;
}
}
if(start == 0 && end == 0){
list.add(-1);
return list.stream().mapToInt(i->i).toArray();
} else if(start == end){
list.add(arr[start]);
return list.stream().mapToInt(i->i).toArray();
}
for(int j = start; j <= end; j++){
if(start == 0 && end == 0){
list.add(-1);
return list.stream().mapToInt(i->i).toArray();
}
list.add(arr[j]);
}
return list.stream().mapToInt(i->i).toArray();
}
}
---------------------------
정확성 테스트
테스트 1 〉 통과 (3.59ms, 78.8MB)
테스트 2 〉 통과 (5.41ms, 73.5MB)
테스트 3 〉 통과 (12.37ms, 88.1MB)
테스트 4 〉 통과 (27.23ms, 93MB)
테스트 5 〉 통과 (36.19ms, 95.3MB)
테스트 6 〉 통과 (6.92ms, 93.9MB)
테스트 7 〉 통과 (13.76ms, 110MB)
테스트 8 〉 통과 (13.26ms, 85.1MB)
테스트 9 〉 통과 (8.48ms, 84.1MB)
테스트 10 〉 통과 (13.76ms, 95.1MB)
테스트 11 〉 통과 (11.85ms, 95.8MB)
테스트 12 〉 통과 (13.25ms, 100MB)
테스트 13 〉 통과 (4.39ms, 86.1MB)
테스트 14 〉 통과 (12.68ms, 106MB)
- 저장을 시작할지 정하는 불린 check와 저장을 시작할 시작 위치(시작 인덱스 번호)와 저장을 그만둘 위치를 저장할 start와 end 변수를 생성하였다.
- 그 후 for 문을 통하여 arr의 길이만큼 반복하며 만약 arr [i]의 원소 값이 2이며, check가 참(true)라면 시작 위치를 받으며 check를
true로 바꾸어 준다. (주의 ! 불린 변수 check의 초기 변수 값은 false이기 때문에! check는 true이다.)
만약 이 조건이 충족되지 않는다면 - 다음 조건인 arr[i]의 원소 값이 2이며, check가 false라면 종료 위치를 받는다.
- 이것도 아니라면 end가 0일 때 시작 위치(start)를 종료 위치(end)에 저장한다.
- 이렇게 하여 저장을 시작할 위치와 저장을 종료할 위치를 알 수 있으며, 2가 하나만 있다는 경우에 그 원소 값만 저장하기 위한 경우도 해결이 가능하다.
'JAVA > 프로그래머스 코딩 기초 트레이닝' 카테고리의 다른 글
[프로그래머스, LV.0] n개 간격의 원소들 (0) | 2023.09.06 |
---|---|
[프로그래머스, LV.0] 순서 바꾸기 (0) | 2023.09.06 |
[프로그래머스, LV.0] 배열 만들기 3 (0) | 2023.09.06 |
[프로그래머스, LV.0] 리스트 자르기 (0) | 2023.09.04 |
[프로그래머스, LV.0] 가까운 1 찾기 (0) | 2023.09.04 |