K번째 큰 수
현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가 여러장 있을 수 있습니다. 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려 고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다. 기록한 값 중 K번째로 큰 수를 출력 하는 프로그램을 작성하세요. 만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값 은 22입니다.
▣ 입력설명
첫 줄에 자연수 N(3<=N<=100)과 K(1<=K<=50) 입력되고, 그 다음 줄에 N개의 카드값이 입력 된다.
▣ 출력설명
첫 줄에 K번째 수를 출력합니다. K번째 수는 반드시 존재합니다.
▣ 입력예제
10 3 13 15 34 23 45 65 33 11 26 42
▣ 출력예제
143
function solution(n, k, card){
let sum = []
for (let i = 0; i < 10; i++) {
for (let j = i + 1; j < 10; j++) {
for (let k = j + 1; k < 10; k++) {
sum.push(card[i] + card[j] + card[k])
}
}
}
sum.sort((a, b) => {
if (a - b > 0) return -1
if (a - b === 0) return 0
if (a - b < 0) return 1
})
answer = sum[k - 1]
return answer;
}
let arr=[13, 15, 34, 23, 45, 65, 33, 11, 26, 42];
console.log(solution(10, 3, arr));
두 배열 합치기
오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램 을 작성하세요.
▣ 입력설명
첫 번째 줄에 첫 번째 배열의 크기 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){
let answer = [...arr1, ...arr2]
answer.sort((a, b) => a - b)
return answer;
}
let a=[1, 3, 5];
let b=[2, 3, 6, 7, 9];
console.log(solution(a, b));
위의 방식도 있지만 two-pointer 알고리즘으로 풀 수도 있다.
function solution(arr1, arr2){
let answer = [];
let p1=p2=0;
let n = arr1.length
let m = arr2.length
while (p1 < n && p2 < m) {
if (arr1[p1] <= arr2[p2]) answer.push(arr1[p1++])
else answer.push(arr2[p2++])
}
while (p1 < n) answer.push(arr1[p1++])
while (p2 < m) answer.push(arr2[p2++])
return answer;
}
let a=[1, 3, 5];
let b=[2, 3, 6, 7, 9];
console.log(solution(a, b));
'알고리즘 풀이' 카테고리의 다른 글
[20211109]알고리즘 풀이 (0) | 2021.11.09 |
---|---|
[20211028]알고리즘 풀이 (0) | 2021.10.28 |
[20211024]알고리즘 풀이 (0) | 2021.10.24 |
[20211018]알고리즘 풀이 (0) | 2021.10.18 |
[20211012]알고리즘 풀이 (0) | 2021.10.12 |