Tesseractjh
한 걸음씩
Tesseractjh
전체 방문자
오늘
어제
  • 전체 (293)
    • IT (30)
      • JavaScript (7)
      • TypeScript (5)
      • React (5)
      • Next.js (3)
      • MongoDB (2)
      • Webpack (2)
      • HTML & CSS (1)
      • Git (0)
      • AWS (1)
      • 기타 (4)
    • 연습장 (259)
      • 백준(BOJ) 문제풀이 (185)
      • 프로그래머스 문제풀이 (61)
      • LeetCode 문제풀이 (2)
      • HackerRank 문제풀이 (7)
      • 낙서장 (3)
      • 기타 (1)
    • 프로젝트 (3)
      • 지뢰피하기 (1)
      • 키릴-라틴 문자 변환기 (1)
      • Flex & Grid (1)
    • 멋쟁이사자처럼 프론트엔드 스쿨 1기 (1)
      • 일기 & 회고록 (1)

인기 글

티스토리

hELLO · Designed By 정상우.
Tesseractjh

한 걸음씩

연습장/백준(BOJ) 문제풀이

[백준 2798] 블랙잭 with Node.js

2021. 3. 25. 21:49

문제 링크

www.acmicpc.net/problem/2798

 

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
    '연습장/백준(BOJ) 문제풀이' 카테고리의 다른 글
    • [백준 10828] 스택 with Python
    • [백준 10870] 피보나치 수 5 with Node.js
    • [백준 1010] 다리 놓기 with Python
    • [백준 11721] 열 개씩 끊어 출력하기 with Node.js
    Tesseractjh
    Tesseractjh
    바닐라 자바스크립트를 좋아하는 개발자입니다

    티스토리툴바