알고리즘/JavaScript 22

자바스크립트로 백준 1531 풀기

내 풀이) 단순히 생각하자면, 그냥 xy 좌표에 따라 for문을 돌려서 가려진 횟수를 카운트하고, M보다 더 많이 가려진 배열 위치를 세어 리턴하면 된다. 그런데 이 때 그림 100x100 배열을 1차원 배열로 만들지, 2차원 배열로 만들지에 따라 코드가 달라진다. (크게는 안달라짐 ㅎㅎ) 내 코드) 평범하게 2차원 배열로 그림 배열을 선언하는 경우. 3중 for문까지 돌게 된다. // fs로 입력받는 경우 function solution(N, M, location) { // 하나도 가려지지 않은 그림 배열. const ARR = []; let answer = 0; for (let i = 0; i < 100; i++) { const line = []; for (let j = 0; j < 100; j++)..

자바스크립트로 백준 1551 풀기

solved.ac 기준 브론즈 1단계. 내 풀이) 어려운 문제는 아니다. k번 횟수만큼 for문을 돌면서, 새로운 배열을 만들면 된다. 만약 배열의 길이가 1 이하가 된다면 그대로 for 문을 끝낸다. 만약 처음부터 입력 받은 k가 0이라면, 입력받은 배열을 그대로 다시 리턴한다. 내 코드) // fs로 입력받는 경우 function solution(numArr, N, K) { if (K === 0) { return numArr.join(","); } for (let i = 0; i < K; i++) { let answer = []; if (numArr.length

자바스크립트로 백준 1292 풀기

> solved.ac 기준 브론즈 1단계, 정답률 56.736% 문제 해석) 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5 ... 로 진행되는 수열이 있다. 예를 들어 인풋으로 3 7 을 받는다면, 수열의 3행 + 4행 + 5행 + 6행 + 7행 = 2 + 3 + 3 + 3 + 4 = 15 를 리턴하도록 함수를 짜야 한다. 이렇게 어느 구간 사이의 합을 구할 때엔, 동적 프로그래밍, DP를 이용해야 한다. 새로운 배열 Arr을 하나 만들고, Arr배열의 1행에는 수열 0행 + 1행 Arr배열의 2행에는 수열 0행 + 1행 + 2행 Arr배열의 1행에는 수열 0행 + 1행 + 2행 + 3행 Arr배열의 2행에는 수열 0행 + 1행 + 2행 + 3행 + 4행 ... 식으로 진..

자바스크립트로 백준 1173 풀기

solved.ac 기준 브론즈 2단계 내 풀이) 어려운 문제도 아녔는데 조건 하나를 놓쳐서 30분을 고민했다. 최저 심박수 m, 최대 심박수 M 운동 1분당 오르는 심박수 T 휴식 1분당 내려가는 심박수 R 운동 N분을 하기 위해 필요한 운동 + 휴식 총 시간은? 단, 최대 심박수가 M을 초과하면 -1을 리턴한다. 즉, m + T > M 일 경우 return -1 단, 최소 심박수가 m 미만이 되면 최소 심박수를 m으로 간주한다. 즉, M - R < m 일 경우 현재 심박수는 m. 최소 심박수가 m 미만이 될 경우에도 운동을 못 하는걸로 착각해서 한참을 헤맸다. 백준 질문 게시판에서 나 같은 질문글을 보고서야 내가 무슨 조건을 놓쳤는지 깨달았다. (고마워요 스피드웨건!) 내 코드) // fs로 입력받는 ..

자바스크립트로 백준 10869번 풀기

브론즈 5단계 > 10869번 사칙 연산 1. 내 풀이) 간단한 문제이지만 js로 입력 받는 것을 연습하기 위해 풀어보았다. 1. readline으로 입력받을 때 // readline으로 푸는 경우 function solution(num1, num2) { console.log(num1 + num2); console.log(num1 - num2); console.log(num1 * num2); console.log(Math.floor(num1 / num2)); console.log(num1 % num2); } const readline = require("readline").createInterface({ input: process.stdin, output: process.stdout, }); let in..

자바스크립트로 백준 10998 풀기

내 풀이) readline으로 입력 받는 법. const readline = require('readline').createInterface({ input: process.stdin, output: process.stdout, }); let input = []; readline.on('line', function(line) { input.push(line.split(" ")); }).on('close', function(){ console.log(Number(input[0][0]) * Number(input[0][1])); process.exit(); }); fs로 입력 받는 법 const fs = require('fs'); const input = fs.readFileSync("/dev/stdin")...

백준에서 javascript로 문제 푸는 법 총정리 (feat. 입력 받는 법)

1. 백준에서 javascript로 문제 푸는 법 백준에선 javascript 언어를 지원하지 않는다. js로 풀려면 node.js를 선택해서 풀어야 한다. 따라서 우리는 node.js를 선택해서 풀어야 한다. 그런데 node.js로 풀 때 문제가 있다. 어떻게 입력값을 받고 출력하는가? 입력에는 realine 혹은 fs 모듈을 쓰고, 출력에는 console.log() 메소드를 쓰자. readline 사용하기 // 1. 입력값이 한 줄에 한 개 뿐일 때 string 형 값을 가져온다. const readline = require(&#39;readline&#39;).createInterface({ input: process.stdin, output: process.stdout, }); let input =..

JavaScript로 프로그래머스 풀기, 추억 점수

내 풀이) 좀 더 연산을 효율적으로 하기 위해, name과 yearning을 맵핑한 객체를 만들자. 추억 점수는 number 범위를 넘지 않으므로, 일반적인 연산을 해도 좋다. 내 코드) function solution(name, yearning, photo) { const score = {}; name.forEach((el, i) => { score[el] = yearning[i]; }); const answer = photo.map((els) => { let sum = 0; els.forEach((el)=>{ sum += score[el] ?? 0; }); return sum; }); return answer; } 여기서, 연습 겸 sum 을 구할 때엔 reduce 메소드를 활용한다면 아래 코드와 같..