자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비) - 인프런 | 강의
자바스크립트(JavaScript)로 코딩테스트를 준비하시는 분을 위한 강좌입니다. 재미있게 풀 수 있는 기초 단계 문제부터 고급 알고리즘까지 단계별로 차근차근 배우도록 설계된 강좌입니다., - 강의
www.inflearn.com
오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램
을 작성하세요.
▣ 입력설명
첫 번째 줄에 첫 번째 배열의 크기 N(1<=N<=100)이 주어집니다.
두 번째 줄에 N개의 배열 원소가 오름차순으로 주어집니다.
세 번째 줄에 두 번째 배열의 크기 M(1<=M<=100)이 주어집니다.
네 번째 줄에 M개의 배열 원소가 오름차순으로 주어집니다.
각 리스트의 원소는 int형 변수의 크기를 넘지 않습니다.
▣ 출력설명
오름차순으로 정렬된 배열을 출력합니다.
▣ 입력예제 1
3
1 3 5
5
2 3 6 7 9
▣ 출력예제 1
1 2 3 3 5 6 7 9
function solution(arr1, arr2) {
const answer = [];
let p1 = 0,
p2 = 0;
//둘중 하나가 길이만큼 다 도는 경우, 종료
while (p1 < arr1.length && p2 < arr2.length) {
//p1이 가리키고 있는게 더 작은 경우 arr1[p1] 넣기
if (arr1[p1] <= arr2[p2]) {
answer.push(arr1[p1]);
p1++;
}
//p2가 가리키고 있는게 더 작은 경우 arr2[p2] 넣기
else {
answer.push(arr2[p2]);
p2++;
}
}
//다 넣고 남은거는 잘라서 넣자
if (p1 < arr1.length) {
answer.push(...arr1.slice(p1));
} else {
answer.push(...arr2.slice(p2));
}
return answer;
}
let a = [1, 3, 5];
let b = [2, 3, 6, 7, 9];
console.log(solution(a, b));
//1. p1, p2 0으로 세팅
//2. p1 와 p2 둘 중 끝까지 가는 경우 종료
//3. arr1[p1] < arr2[p2] 비교해서 작은거 answer에 push
//4. arr1 또는 arr2 중에서 p1, p2 중 끝에 도달한거 말고 끝에 도달 못한거는 그만큼 잘라서 answer에 넣기
코드 개선
function solution(arr1, arr2) {
const answer = [];
const p = [0, 0];
//둘중 하나가 길이만큼 다 도는 경우, 종료
while (p[0] < arr1.length && p[1] < arr2.length) {
answer.push(arr1[p[0]] <= arr2[p[1]] ? arr1[p[0]++] : arr2[p[1]++]);
}
//다 넣고 남은거는 잘라서 넣자
answer.push(...(p[0] < arr1.length ? arr1.slice(p[0]) : arr2.slice(p[1])));
return answer;
}
let a = [1, 3, 5];
let b = [2, 3, 6, 7, 9];
console.log(solution(a, b));
'코테풀이 > 투포인터' 카테고리의 다른 글
[인프런 | JS] 연속 부분수열 1 (0) | 2023.02.12 |
---|---|
[인프런 | JS] 공통원소 구하기 (0) | 2023.02.12 |
[프로그래머스 | JS] 보석 쇼핑(투포인터) (0) | 2023.02.10 |
[프로그래머스 | JS] 두 큐 합 같게 만들기(투포인터) (0) | 2023.01.15 |
[프로그래머스 | JS] 구명보트(투포인터) (0) | 2023.01.13 |
[인프런 | JS]두 배열 합치기