Algorithm/Programmers 입문
[프로그래머스 코딩기초 트레이닝] 2의 영역 (JAVA)
JunFe
2023. 11. 23. 00:05
반응형
문제 설명
정수 배열 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] |
입출력 예 설명
입출력 예 #1
2가 있는 인덱스는 1번, 5번 인덱스뿐이므로 1번부터 5번 인덱스까지의 부분 배열인 [2, 1, 4, 5, 2]를 return 합니다.
입출력 예 #2
2가 한 개뿐이므로 [2]를 return 합니다.
입출력 예 #3
2가 배열에 없으므로 [-1]을 return 합니다.
입출력 예 #4
2가 있는 인덱스는 1번, 3번, 6번 인덱스이므로 1번부터 6번 인덱스까지의 부분 배열인 [2, 1, 2, 1, 10, 2]를 return 합니다.
문제 풀이
-> 먼저 2가 arr에 몇개가 있는지 count를 통해 구한다. 2의 개수가 0이 아니라면 임시 배열에 2가 있는 index값을 담은 후, 해당 배열을 통해서 반복문을 작성하여 arr배열에서 필요한 index부분의 값을 가져와 answer 배열에 담는다. 2의 개수가 0이라면 answer 배열의 크기를 1로 두고 -1을 담는다.
코드
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
int[] answer = {};
int count = 0;
int count2 = 0;
int[] temp = {};
for(int i=0;i<arr.length;i++){
if(arr[i]==2){
count++;
}
}
if(count!=0){
temp = new int[count];
for(int i=0;i<arr.length;i++){
if(arr[i]==2){
temp[count2]=i;
count2++;
}
}
answer = new int[temp[temp.length-1]-temp[0]+1];
for(int i=0; i<temp[temp.length-1]-temp[0]+1;i++){
answer[i]=arr[temp[0]+i];
}
} else {
answer = new int [1];
answer[0]=-1;
}
return answer;
}
}
반응형