문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/181894
문제 설명
정수 배열 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] |
코드 구현
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
int start = -1;
int end = -1;
for (int i = 0; i < arr.length; i++) {
if(arr[i] == 2) {
start = i;
break;
}
}
for (int i = arr.length - 1; i > -1; i--) {
if(arr[i] == 2) {
end = i;
break;
}
}
if (start == -1 && end == -1) {
return new int[]{-1};
} else {
//copyOfRange의 마지막 인덱스는 -1 이 되기 때문에 +1 처리
return Arrays.copyOfRange(arr, start, end + 1);
}
}
}
풀이
- 시작하는 점을 나타내는 변수인 start와 마지막을 나타내는 end를 -1로 초기화 한다.
- for문을 사용해서 2로 시작하는 구간과 2로 끝나는 구간을 확인한다.
- for문을 0부터 시작하는 방법과 for문을 마지막 Length -1 부터 시작해서 break문으로 해당 조건문을 탈출한다.
- start와 end 값이 -1이 아니면 2가 없는 경우로 판단해서 [-1]로 반환한다.
- -1의 값이 아닌 경우에는 2의 값이 있는 것으로 판단하고 Arrays.copyOfRange() 메서드를 활용해서
2가 포함된 연속된 부분 배열을 반환한다.
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Java :: x 사이의 개수 (0) | 2024.03.23 |
---|---|
[프로그래머스] Java :: 문자열 뒤집기 (0) | 2024.03.22 |
[프로그래머스] Java :: 가장 큰 수 (0) | 2023.10.05 |
댓글