문제 설명

당신은 온라인으로 주문을 받고 있습니다.

주문 번호는 주문 순서대로 1부터 1씩 증가합니다. 주문이 취소될 경우, 해당 주문 번호는 주문 내역에서 제거됩니다.

일부 주문이 취소된 주문 내역이 주어질 경우, n번째 주문 취소된 주문 번호를 구하는 프로그램을 구현하세요.


입력 형식

  • orders: 주문 내역이 담긴 정수 배열
  • n: 찾고자 하는 주문 번호의 차례의 정수

출력 형식

  • n번째 주문 취소된 주문 번호를 정수로 반환

제약 사항

  • 0 < orders.length <= 1000
  • 0 < n <= 1000

입출력 예시

  •  입력
    • orders = {2, 4, 5, 7}
    • n = 3
  • 출력: 6
  • 설명: 아래와 같이 3번째 취소된 주문을 찾을 수 있다.
  1번째 취소 주문 번호는 1
  2번째 취소 주문 번호는 3
  3번째 취소 주문 번호는 6

작성 코드

(4/20)

class Solution {
    public int solution(int[] orders, int n) {
        int missCount = 0;
        int num = 0;
        int i = 0;

        while (missCount != n) {
            num++;
            if (i < orders.length && orders[i] == num) {
                i++;
            } else {
                missCount++;
            }
        }
        return num;
    }
    
    public static void main(String[] args) {
        Solution st = new Solution();
        int[] orders = {2, 4, 5, 7};
        int n = 3;
        System.out.println(st.solution(orders, n)); // 출력: 6
    }
}

missCount 변수는 빠진 숫자의 개수를 저장하고, num 변수는 현재 찾고 있는 숫자를 저장한다.

i 변수는 orders 배열을 탐색할 때 현재 인덱스를 저장한다.

while 반복문을 통해서 missCount가 n이 될 때까지 빠진 숫자를 찾는다.

num 변수를 1씩 증가시키면서, 만약 orders 배열 안에 num 변수에 해당하는 숫자가 있으면

i 변수를 증가시킨다. 그렇지 않으면 missCount 변수를 증가시킨다.

 

num 변수를 반환해서 n번째 빠진 숫자를 반환한다.