Skip to Content

이 문서의 네 문제는 학습용으로 새로 구성한 문제입니다. 먼저 solution 함수만 직접 완성한 뒤 풀이를 확인하세요.

응시 방법

  • 각 문제의 매개변수와 반환값부터 확인합니다.
  • 제한사항을 근거로 목표 복잡도를 정합니다.
  • 예시와 직접 만든 경계 사례를 손으로 검산합니다.
  • 코드는 정답 값을 return하는 solution 함수로 작성합니다.

문제 1. 누락된 상품 코드

재고 상품 코드 배열 stock과 주문 코드 배열 orders가 주어집니다. 재고에 없는 주문 코드를 처음 등장한 순서대로, 중복 없이 반환하세요.

함수 시그니처: solution(stock, orders)

제한사항

  • 두 배열의 길이는 각각 1 이상 100,000 이하입니다.
  • 상품 코드는 대소문자를 구분합니다.

입출력 예

매개변수반환값
[A1, B2], [B2, C3, C3, D4][C3, D4]

풀이와 코드 보기

핵심 패턴: Set으로 존재 여부와 결과 중복을 동시에 관리

function solution(stock, orders) { const available = new Set(stock); const missing = new Set(); for (const code of orders) { if (!available.has(code)) missing.add(code); } return [...missing]; }
  • 시간복잡도: O(n + m)
  • 공간복잡도: O(n + m)
  • 경계 사례: 누락 코드가 없으면 빈 배열

문제 2. 연속 k일 최대 매출

일별 매출 배열 sales와 정수 k가 주어집니다. 연속한 k일 매출 합의 최댓값을 반환하세요.

함수 시그니처: solution(sales, k)

제한사항

  • sales의 길이는 1 이상 200,000 이하입니다.
  • k는 1 이상 sales의 길이 이하입니다.

입출력 예

매개변수반환값
[3, 2, 5, 1, 6, 4], 312

풀이와 코드 보기

핵심 패턴: 고정 길이 슬라이딩 윈도우

function solution(sales, k) { let windowSum = 0; for (let i = 0; i < k; i += 1) windowSum += sales[i]; let answer = windowSum; for (let right = k; right < sales.length; right += 1) { windowSum += sales[right] - sales[right - k]; answer = Math.max(answer, windowSum); } return answer; }
  • 시간복잡도: O(n)
  • 공간복잡도: O(1)
  • 경계 사례: k가 전체 길이면 전체 합

문제 3. 연속 주문 취소

주문 번호 배열 orders를 왼쪽부터 처리합니다. 같은 번호가 연속으로 만나면 두 주문을 모두 취소할 때 최종 주문 배열을 반환하세요.

함수 시그니처: solution(orders)

제한사항

  • orders의 길이는 1 이상 200,000 이하입니다.
  • 취소 뒤 새로 맞닿은 같은 번호도 취소합니다.

입출력 예

매개변수반환값
[1, 2, 2, 1, 3][3]

풀이와 코드 보기

핵심 패턴: 마지막 미처리 값만 스택에서 비교

function solution(orders) { const stack = []; for (const order of orders) { if (stack.at(-1) === order) stack.pop(); else stack.push(order); } return stack; }
  • 시간복잡도: O(n)
  • 공간복잡도: O(n)
  • 경계 사례: 모두 취소되면 빈 배열

문제 4. 동점 순위

점수 배열 scores가 주어집니다. 높은 점수가 1등이고 같은 점수는 같은 순위를 갖는 밀집 순위를 원래 순서대로 반환하세요.

함수 시그니처: solution(scores)

제한사항

  • scores의 길이는 1 이상 100,000 이하입니다.
  • 동점 다음 순위는 건너뛰지 않습니다.

입출력 예

매개변수반환값
[80, 100, 80, 70][2, 1, 2, 3]

풀이와 코드 보기

핵심 패턴: 고유 값 정렬 뒤 순위 Map 생성

function solution(scores) { const unique = [...new Set(scores)].sort((a, b) => b - a); const rank = new Map(unique.map((score, index) => [score, index + 1])); return scores.map((score) => rank.get(score)); }
  • 시간복잡도: O(n log n)
  • 공간복잡도: O(n)
  • 경계 사례: 모든 점수가 같으면 모두 1등

기본 모의고사 점검표

  • 문제를 읽자마자 자료구조를 정하지 않고 제한사항부터 확인했는가
  • 풀이의 정당성을 한두 문장으로 설명할 수 있는가
  • 빈 결과, 한 원소, 중복, 도달 불가 같은 경계를 확인했는가
  • 시간복잡도와 공간복잡도를 직접 계산했는가

확인 문제

문제 14지선다
누락된 상품 코드의 핵심 풀이 패턴은?
문제 24지선다
누락된 상품 코드 풀이의 시간복잡도는?
문제 34지선다
누락된 상품 코드에서 확인할 경계 사례는?
문제 44지선다
연속 k일 최대 매출의 핵심 풀이 패턴은?
문제 54지선다
연속 k일 최대 매출 풀이의 시간복잡도는?
문제 64지선다
연속 k일 최대 매출에서 확인할 경계 사례는?
문제 74지선다
연속 주문 취소의 핵심 풀이 패턴은?
문제 84지선다
연속 주문 취소 풀이의 시간복잡도는?
문제 94지선다
연속 주문 취소에서 확인할 경계 사례는?
문제 104지선다
동점 순위의 핵심 풀이 패턴은?
문제 114지선다
동점 순위 풀이의 시간복잡도는?
문제 124지선다
동점 순위에서 확인할 경계 사례는?
문제 134지선다
제한사항을 먼저 읽는 가장 중요한 이유는?
문제 144지선다
정렬이 필요하지만 원본 배열도 이후 사용한다면?
문제 154지선다
채점기가 확인하는 최종 결과는?

참고 자료

Last updated on