가장 오래 머문 페이지 찾기

자바스크립트 코딩테스트 문제로 paired-argmax 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.

today easy paired-argmax 함수명: findLongestStayPage 제한 시간: 200ms

방문한 페이지 목록과 각 페이지에 머문 시간이 주어질 때, 가장 오래 머문 페이지 이름을 찾아보세요.

문제 설명

페이지 이름 배열 pages와 체류 시간 배열 times가 주어집니다.

두 배열의 같은 인덱스는 같은 방문 기록을 의미합니다. times[i]가 가장 큰 방문 기록의 pages[i]를 반환하는 findLongestStayPage 함수를 작성하세요.

가장 긴 체류 시간이 여러 번 나오면, 그중 가장 먼저 등장한 페이지 이름을 반환합니다.

제한사항

  • 1 <= pages.length <= 100000
  • pages.length === times.length
  • pages의 각 원소는 길이 1 이상 30 이하의 문자열입니다.
  • 0 <= times[i] <= 100000
  • 가장 긴 체류 시간이 여러 번 나오면 가장 앞의 페이지를 반환합니다.
  • 반환값은 페이지 이름 문자열입니다.

예시

  • 입력: pages = ["home", "search", "detail"], times = [12, 25, 18] -> 출력: "search"
  • 입력: pages = ["home", "cart", "pay"], times = [30, 30, 10] -> 출력: "home"
  • 입력: pages = ["only"], times = [0] -> 출력: "only"
  • 입력: pages = ["intro", "help", "done"], times = [0, 5, 5] -> 출력: "help"

힌트

  • 두 배열을 같은 인덱스로 함께 확인하면 됩니다.
  • 현재까지 본 가장 긴 시간을 변수에 저장해 보세요.
  • 동률일 때는 먼저 나온 페이지를 유지해야 하므로 > 조건만 사용하면 됩니다.

해설

이 문제는 두 배열을 나란히 보면서 최댓값의 위치를 찾는 단순 탐색 문제입니다.

예를 들어 pages = ["home", "search", "detail"], times = [12, 25, 18]이라면 25가 가장 큰 체류 시간이고, 같은 위치의 페이지 이름은 "search"입니다.

동률 처리도 중요합니다. pages = ["home", "cart", "pay"], times = [30, 30, 10]에서는 30이 두 번 나오지만, 가장 먼저 나온 페이지는 "home"이므로 "cart"로 갱신하면 안 됩니다.

풀이 흐름은 다음과 같습니다.

  1. 첫 번째 페이지와 시간을 현재 정답으로 둡니다.
  2. 두 번째 원소부터 마지막 원소까지 순회합니다.
  3. times[i]가 현재 최대 시간보다 클 때만 최대 시간과 페이지 이름을 갱신합니다.
  4. 순회가 끝나면 저장해 둔 페이지 이름을 반환합니다.

각 방문 기록을 한 번씩만 확인하므로 시간 복잡도는 O(n)입니다. 정답 페이지와 최대 시간만 저장하면 되므로 공간 복잡도는 O(1)입니다.

코드 작성

starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.

JavaScript 에디터 로딩 중...

커스텀 테스트

함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]

아직 실행하지 않았습니다.

실행 결과

아직 실행하지 않았습니다.

예제 테스트를 실행하면 여기에서 결과를 확인할 수 있습니다.

댓글

문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.