두 대기열 번갈아 합치기
자바스크립트 코딩테스트 문제로 array-interleaving 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.
문제 설명
두 개의 대기열 first, second가 배열로 주어집니다.
첫 번째 대기열에서 한 명, 두 번째 대기열에서 한 명을 번갈아 꺼낸 순서로 새 배열을 만드는 mergeAlternatingQueues 함수를 작성하세요.
어느 한쪽 대기열이 먼저 비면, 다른 대기열에 남아 있는 값은 기존 순서 그대로 뒤에 이어 붙입니다.
제한사항
0 <= first.length <= 1000000 <= second.length <= 100000first와second의 각 원소는 길이 1 이상 20 이하의 문자열입니다.- 반환값은 두 배열의 원소를 번갈아 합친 새 배열입니다.
- 원본 배열의 순서는 바꾸지 않습니다.
예시
- 입력:
first = ["A", "B"],second = ["1", "2", "3"]-> 출력:["A", "1", "B", "2", "3"] - 입력:
first = [],second = ["Solo"]-> 출력:["Solo"] - 입력:
first = ["A"],second = []-> 출력:["A"] - 입력:
first = ["A", "B", "C"],second = ["x"]-> 출력:["A", "x", "B", "C"]
힌트
- 두 배열 중 더 긴 길이만큼 반복하면 됩니다.
- 현재 인덱스에
first[i]가 있으면 먼저 넣고,second[i]가 있으면 그다음 넣어 보세요. - 빈 배열이 들어와도 같은 방식으로 처리할 수 있습니다.
해설
이 문제는 두 배열을 같은 인덱스 기준으로 보면서 결과 배열에 차례로 추가하는 구현 문제입니다.
예를 들어 first = ["A", "B"], second = ["1", "2", "3"]이면 다음 순서로 결과가 만들어집니다.
first[0]인"A"를 넣습니다.second[0]인"1"을 넣습니다.first[1]인"B"를 넣습니다.second[1]인"2"를 넣습니다.first[2]는 없고second[2]인"3"만 있으므로"3"을 넣습니다.
따라서 결과는 ["A", "1", "B", "2", "3"]입니다.
풀이 순서는 다음과 같습니다.
- 빈 배열
result를 준비합니다. Math.max(first.length, second.length)로 반복할 길이를 정합니다.- 각 인덱스
i마다i < first.length이면first[i]를 추가합니다. - 이어서
i < second.length이면second[i]를 추가합니다. - 반복이 끝나면
result를 반환합니다.
두 배열의 모든 원소를 한 번씩만 확인하므로 시간 복잡도는 O(n + m)입니다.
코드 작성
starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.
JavaScript
에디터 로딩 중...
커스텀 테스트
함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]
아직 실행하지 않았습니다.
실행 결과
아직 실행하지 않았습니다.
예제 테스트를 실행하면 여기에서 결과를 확인할 수 있습니다.
댓글
문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.