정수 배열 arr가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요. 단, arr에 2가 없는 경우 [-1]을 return 합니다.
package com.sbs.apple;
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int[] arr) {
boolean b = false;
int c = 0;
int d=0;
List a = new ArrayList<>();
for (int i = 0; i <arr.length; i++) {
if (arr[i] == 2) {
c++;
}
}
if (c > 1) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 2) {
a.add(arr[i]);
b = true;
d++;
}
if(d==c){
b=false;
}
if (b & arr[i] !=2) {
a.add(arr[i]);
}
}
int[] answer = new int[a.size()];
for (int i = 0; i < a.size(); i++) {
answer[i]= (int) a.get(i);
}
return answer;
}
else if(c==1){
for (int i = 0; i < arr.length; i++) {
if(arr[i]==2){
a.add(arr[i]);
}
}
int[] answer = new int[a.size()];
for (int i = 0; i < a.size(); i++) {
answer[i]= (int) a.get(i);
}
return answer;
}else{
int[] answer =new int[1];
answer[0]=-1;
return answer;
}
}
}
일단 2의 개수를 구해서 2이상일때 , 1일 때 0 일때를 구분해서 각각 방법에 맞게 구해준다.
1일때랑 0일때는 쉽게 구할수 있고 2이상일때는 2가 나타나는 시점부터 논리연산자를 써서
그다음에 배열 숫자가 들어갈수있도록 버튼 같은 기능을 넣어주고 이제 마지막 2가 나오면 그이후에
숫자는 추가 되지 않기 위해서 그에맞는 if 구문도 써서 2의 개수가 다 나왔다면 논리연산자 변수를 false 로 바꿔서
더이상 숫자가 추가되지 않게 하였다.
'자바 알고리즘 문제' 카테고리의 다른 글
| 문자열 묶기 (0) | 2023.12.29 |
|---|---|
| 수열과 구간 쿼리 4 (0) | 2023.12.29 |
| 문자열 반복해서 출력하기 (0) | 2023.12.21 |
| 간단한 논리 연산 (1) | 2023.12.20 |
| 한 번만 등장한 문자 (0) | 2023.12.20 |