문제 링크
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
풀이
const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\s/).map(item => parseInt(item));
const n = input[0];
const m = input[1];
const cards = input.slice(2);
let sum = 0;
for(i=0; i<cards.length-2; i++) {
for(j=i+1; j<cards.length-1; j++) {
for(k=j+1; k<cards.length; k++) {
if(cards[i]+cards[j]+cards[k] <= m && cards[i]+cards[j]+cards[k] > sum) {
sum = cards[i]+cards[j]+cards[k];
}
}
}
}
console.log(sum);
가능한 모든 조합을 탐색하기 위해 삼중으로 반복문을 사용하였다. M 이하이면서 기존에 구한 합보다 더 큰 합이 나올 때마다 sum의 값을 갱신하도록 하였다.
처음에 map의 매개변수로 parseInt를 사용했을 때는 오류가 났다. parseInt를 화살표 함수를 써서 item => parseInt(item)으로 바꾸고 나서야 통과가 되었다.
MDN에 따르면, parseInt()와 Array.prototype.map()은 다음과 같은 형식으로 사용된다.
parseInt(string, radix);
arr.map(callback(currentValue[, index[, array]])[, thisArg])
map의 callback으로 두 개 이상의 매개변수를 갖는 함수가 올 경우, 의도하지 않은 결과가 나올 수 있다.
console.log(["1", "2", "3", "4", "5"].map(parseInt)); // [1, NaN, NaN, NaN, NaN]
위 코드는 아래와 같은 과정을 거쳐 실행된다.
console.log(parseInt("1", 0, ["1", "2", "3", "4", "5"])); // 1
console.log(parseInt("2", 1, ["1", "2", "3", "4", "5"])); // NaN
console.log(parseInt("3", 2, ["1", "2", "3", "4", "5"])); // NaN
console.log(parseInt("4", 3, ["1", "2", "3", "4", "5"])); // NaN
console.log(parseInt("5", 4, ["1", "2", "3", "4", "5"])); // NaN
parseInt는 매개변수를 두 개 갖기 때문에 배열의 item이 첫 번째 인자로, 그 item의 index를 두 번째 인자로 받고, 세 번째 인자는 무시한다. 이렇게 하여 배열의 각 item이 자신의 index진수로 평가된 정수를 반환하게 된다.
문제를 풀 때는 화살표 함수를 이용하여 해결하였는데, MDN에는 더욱 간단한 해법을 제시하고 있다.
console.log(["1", "2", "3", "4", "5"].map(Number)); // [1, 2, 3, 4, 5]
console.log(["1.1", "2.22", "3.33", "4.4e40", "5.0"].map(Number)); // [1.1, 2.22, 3.33, 4.4e+40, 5]
그러나 이 방법은 pasreInt와는 달리 실수나 지수표현도 그대로 반환하는 단점이 있다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 9012] 괄호 with Python (0) | 2021.03.30 |
---|---|
[백준 10828] 스택 with Python (0) | 2021.03.26 |
[백준 10870] 피보나치 수 5 with Node.js (0) | 2021.03.26 |
[백준 1010] 다리 놓기 with Python (0) | 2021.03.25 |
[백준 11721] 열 개씩 끊어 출력하기 with Node.js (0) | 2021.03.25 |