1. 문제
정수로 이루어진 배열이 있다.
A = [1,3,4,1,2,6] 는 5를 반환하고,
A = [-1,-3]은 1을 반환하고,
A = [1,2,3]은 4를 반환한다.
0보다 크면서, A 배열에 포함되지 않는 가장 작은 양의 정수를 구한다.
2. 조건
1. 배열에 포함된 수는 100,000보다 작은 수 여야한다.
3. 풀이
public class Test {
public int solution(int[] A) {
int[] B = new int[100];
int result = 1;
for(int i=0;i<A.length;i++) {
if(A[i]>0) B[A[i]]++;
}
Boolean flag = false;
for(int j=1;j<=A.length+1;j++) {
if( B[j]==0 && (B[j-1]!=0 || B[j+1]!=0) ) {
result = j;
break;
}else {
flag = true;
}
}
if(!flag) result = 1;
return result;
}
}
4. 전략
1. B 배열을 생성하여 A의 값을 인덱스로 하여 1 씩 더해준다. ( 가장 작은 양의 정수를 구하기 위함 )
2. A 배열의 값이 음수일 수 있으므로, A[i] > 0 조건을 부여한다. (B[-1], B[-2] 에 1씩 더해질 수 없기 때문) -- 코드라인 7
3. B 배열에 대해 B[j]가 0이면서 B[j+1]이 0이 아니거나 / B[j-1]이 0이 아닌 경우, j값이 반환 값이므로, for문을 탈출한다. (break) -- 코드라인 11~13
4. A = {-1, -3}의 경우 B = {0,0,0, ... } 이므로 / flag를 false로 초기화하여 1을 반환하게 한다 -- 코드라인 14~18
'코딩 테스트 > 알고리즘' 카테고리의 다른 글
동빈나 파이썬 알고리즘 - 음료수 얼려 먹기 (1) | 2023.05.07 |
---|---|
동빈나 파이썬 알고리즘 - 미로 탈출 (0) | 2023.05.07 |
이상한 문자 만들기 (프로그래머스) (0) | 2022.05.18 |
제일 작은 수 제거하기 (프로그래머스) (0) | 2022.05.17 |
하샤드 수 (0) | 2022.05.16 |