포스트

2021-02-21-TIL

양의 정수 중 빠진 가장 작은 수 찾기

풀이 코드와 채점 메모로 보아 Codility의 MissingInteger 문제다. 정수 N개로 된 배열 A가 주어질 때 A에 없는 가장 작은 양의 정수를 돌려줘야 한다. 예를 들어 [1, 3, 6, 4, 1, 2]이면 5, [1, 2, 3]이면 4, [-1, -3]이면 1이다. N은 1 이상 100,000 이하이고, 각 원소는 -1,000,000 이상 1,000,000 이하다.

채점 결과에서 메모해 둔 실패 사례는 다음과 같다.

For example, for the input [-1000000, 1000000] the solution terminated unexpectedly.

chaotic sequences length=10005 (with minus)

WRONG ANSWER, got 0 expected 100001

chaotic + many -1, 1, 2, 3 (with minus)

첫 번째는 음수 최솟값과 양수 최댓값이 함께 들어간 입력에서 실행이 비정상 종료된 경우다. WRONG ANSWER는 답이 100,001이어야 하는 입력, 즉 1부터 100,000까지가 모두 들어 있는 입력에서 0을 돌려준 경우다. N이 최대 100,000이므로 답은 최대 100,001이다. 아래 풀이는 양수만 체크 배열에 표시한 뒤 1부터 차례로 비어 있는 칸을 찾고, 끝까지 다 차 있으면 반복문이 끝난 시점의 i를 돌려준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
    public int solution(int[] A) {
        int[] check = new int[1000001];
        for (int a : A) {
            if (a > 0) check[a] = 1;
        }
        int i = 1;
        for (i = 1; i < 1000001; i++) {
            if (check[i] == 0) return i;
        }
        return i;
    }
}

컬렉션과 배열 변환

LinkedHashSet을 역순으로 순회하는 방법과, 문자열 배열을 정수 배열로 바꾸는 방법을 찾아봤다.


코드 리뷰 방식 논의

집단 지성으로 코딩테스트 보는 시험

화수목금

  • 이틀 연속 리뷰하지 않는다
  • 그룹 한 명씩
  • 나누지 않고
  • 낮은거 기준으로

리뷰를 받고 싶다

  • 시간이 남을 경우 신청
  • 용기를 내주세요!

크게 개의치 않아도 될 것 같다

  • 보충의견1 : 두 가지 모두 의미가 있다.
  • 보충의견2 : 다른 사람 리뷰를 듣는게 좋은 사람도 있다.
  • 보충의견3 : 꼼꼼히 볼 수 있다.
  • 프레디, 어거스트, 로치

난 둘다

  • 완, 로빈

모두가 다 한 번씩 하는게 좋을 것 같다.

  • 보충의견1 : 자신이 없는 사람은 소극적이게 될 수 있다.
  • 보충의견2 : 편안한 분위기에서 하니까 퀄리티가 떨어진 경험이 있다.
  • 보충의견3 : 잘 하는 사람은 모두 진도가 빠르다
참고한 자료외부 출처 5

외부 출처

이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다