가장 오래 머문 페이지 찾기
자바스크립트 코딩테스트 문제로 paired-argmax 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.
방문한 페이지 목록과 각 페이지에 머문 시간이 주어질 때, 가장 오래 머문 페이지 이름을 찾아보세요.
문제 설명
페이지 이름 배열 pages와 체류 시간 배열 times가 주어집니다.
두 배열의 같은 인덱스는 같은 방문 기록을 의미합니다. times[i]가 가장 큰 방문 기록의 pages[i]를 반환하는 findLongestStayPage 함수를 작성하세요.
가장 긴 체류 시간이 여러 번 나오면, 그중 가장 먼저 등장한 페이지 이름을 반환합니다.
제한사항
1 <= pages.length <= 100000pages.length === times.lengthpages의 각 원소는 길이 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"로 갱신하면 안 됩니다.
풀이 흐름은 다음과 같습니다.
- 첫 번째 페이지와 시간을 현재 정답으로 둡니다.
- 두 번째 원소부터 마지막 원소까지 순회합니다.
times[i]가 현재 최대 시간보다 클 때만 최대 시간과 페이지 이름을 갱신합니다.- 순회가 끝나면 저장해 둔 페이지 이름을 반환합니다.
각 방문 기록을 한 번씩만 확인하므로 시간 복잡도는 O(n)입니다. 정답 페이지와 최대 시간만 저장하면 되므로 공간 복잡도는 O(1)입니다.
코드 작성
starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.
커스텀 테스트
함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]
실행 결과
아직 실행하지 않았습니다.
댓글
문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.