본문 바로가기

JS/백준25

[백준JS] 1037. 약수 안녕하세요. 박기린 입니다. 백준 1037번 약수 문제를 풀어봅시다. 문제 링크 https://www.acmicpc.net/problem/1037 문제 해석 본문의 예제를 인용해서 설명하겠습니다. 예제의 답인 24의 약수는 위와 같습니다. 이 중 '1'과 '답이 되는 약수'를 제외한 수들이 입력으로 주어집니다. 그리고 이 값들을 이용해서 '24'라는 답을 도출해내면 됩니다. 이 문제를 쉽고 빠르게 해결하는 방법으로, 하나의 간단한 수학 지식을 알면 됩니다. 약수의 양끝 수들을 곱해주면 정답이 나옵니다. 이런 식으로 말이죠. 문제에서 받은 입력값은 '1'과 '정답이 되는 수'가 제외된 상태로 주어집니다. 반대로 말하자면, 이 입력값들의 최대값과 최소값을 곱하면 정답이 나옵니다. 정답 코드 const fs .. 2023. 4. 25.
[백준JS] 13909. 창문 닫기 안녕하세요. 박기린 입니다. 백준 13909번 창문 닫기 문제를 풀어봅시다. 문제 링크 https://www.acmicpc.net/problem/13909 문제 해석 const fs = require("fs"); const input = +fs.readFileSync("/dev/stdin").toString().trim(); const windows = Array(input + 1).fill(false); const execute = (n) => { for (let i = 1; n * i 제곱근의 정수 부분 입력값의 제곱근의 정수 부분이 답이었습니다. 원리는 무엇일까요? n번째 창문이 열려 있으려면, 그 창문을 열고 닫은 횟수가 홀수번이어야 합니다. 그럴려면 n의 약수의 갯수가 3개여야 합니다. n = .. 2023. 4. 19.
[백준JS] 2485. 가로수 안녕하세요. 박기린 입니다. 백준 2485번 가로수 문제를 풀어봅시다. 문제 링크 https://www.acmicpc.net/problem/2485 문제 해석 1, 3, 7, 13에 가로수가 놓여 있다고 가정을 합니다. 문제의 목표는, 보기로 주어진 일정하게 놓이지 않은 가로수 사이에 최소한의 가로수를 놓아서 일정한 거리를 두게 끔 만드는 것입니다. 방법은 정말 간단합니다. 각 가로수 간의 거리를 구한 후, 그 거리들의 최대공약수를 구하면 됩니다. 최대공약수의 거리가 되게 끔 가로수를 사이에 넣어주면, 최소한의 가로수를 놓아서 일정한 거리를 두게 만들 수 있습니다. 가로수가 놓이는 갯수는 두 가로수 사이에 추가되는 가로수 갯수 = 두 가로수 사이의 거리 / 최대공약수 - 1 입니다. 3과 7 사이에는 4.. 2023. 4. 18.
[백준JS] 1735. 분수 합 안녕하세요. 박기린 입니다. 백준 1735번 분수 합 문제를 풀어봅시다. 문제 링크 https://www.acmicpc.net/problem/1735 문제 해석 최대공약수를 구하면 기약분수를 바로 구할 수 있습니다. 두 분수를 더한 다음, 분모와 분자의 최대 공약수를 구하고, 분모와 분자를 각각 최대공약수로 나눠주면 기약분수가 됩니다. 최대공약수는 유클리드 호제법으로 구하면 됩니다. // 유클리드 호제법으로 최대공약수를 구하는 식 const gcd = (x, y) => { if (y == 0) return x; else return gcd(y, x % y); }; 정답 코드 const fs = require("fs"); const [moles, denoms] = fs .readFileSync("/dev/.. 2023. 4. 16.
[백준JS] 2903. 중앙 이동 알고리즘 안녕하세요. 박기린 입니다. 백준 2903번 중앙 이동 알고리즘 문제를 풀어봅시다. 문제 링크 https://www.acmicpc.net/problem/2903 문제 해석 주어진 도형이 정사각형이기 때문에 아래와 같은 식이 성립합니다. 한 줄의 사각형의 갯수 = 2 ** n 한 줄의 꼭짓점의 갯수 = 한 줄의 사각형의 갯수 + 1 = 2 ** n + 1 -------------------------------------------- 총 꼭짓점의 갯수 = 한 줄의 꼭짓점의 갯수 ** 2 = (2 ** n + 1) ** 2 정답 코드 const fs = require("fs"); const input = +fs.readFileSync("/dev/stdin").toString().trim(); const re.. 2023. 4. 10.
[백준JS] 11005. 진법 변환 2 안녕하세요. 박기린 입니다. 백준 11005번 진법 변환 2 문제를 풀어봅시다. 문제 링크 https://www.acmicpc.net/problem/11005 문제 해석 10진수 숫자 n을 b진수로 바꾸는 방법은 위의 계산 방식을 사용하면 됩니다. 1. n을 b으로 나눈 후, [몫과 나머지]를 구합니다. 2. 나머지는 오른쪽에 두고, 몫을 계속 n으로 나눕니다. 3. 나눗셈을 반복해서 남은 몫이 n보다 작아지면, 남은 몫과 나머지들을 순서대로 적어줍니다. (몫부터 차례대로 적기 - 가장 맨 처음에 나온 나머지 값이 맨 뒤에 위치해야 합니다.) 10 이상 35 이하의 값의 경우, A부터 Z까지 영어를 이용해서 표기하면 됩니다. 정답 코드 const fs = require("fs"); let [n, b] =.. 2023. 4. 4.
[백준JS] 2745. 진법 변환 안녕하세요. 박기린 입니다. 백준 2745번 진법 변환 문제를 풀어봅시다. 문제 링크 https://www.acmicpc.net/problem/2745 문제 해석 입력으로 들어오는 값은 N과 B입니다. B는 진법을 나타내며, 최대 36진법까지 입력을 받습니다. N은 'B진법에 해당하는 수' 입니다. 특정 진법을 10진법으로 바꾸는 방법은 위의 그림과 같습니다. 1. 숫자를 자릿수별로 나눕니다. 2. '해당 자릿수의 순서 - 1'값을 진법의 제곱수로 곱합니다. ( 36진법의 4번째 자릿수이면 36 ** 3 ) 3. 2단계에서 계산한 값을 해당 자릿수에 곱합니다. ( Z는 10진법 기준으로 35를 의미합니다 => 35 * (36 ** 3) ) 4. 그렇게 모든 자릿수를 계산한 후, 전부 더하면 10진법으로 .. 2023. 4. 1.
[백준JS] 2563. 색종이 안녕하세요. 박기린 입니다. 백준 2563번 색종이 문제를 풀어봅시다. 문제 링크 https://www.acmicpc.net/problem/2563 문제 해석 1. 100 x 100 사이즈의 도화지가 주어집니다. 2. 색종이가 여러 장이 주어지는데, 모두 10 x 10 사이즈입니다. 3. 색종이가 서로 겹처서 놓아지는 경우가 존재합니다. 그럴 경우 '색종이가 붙은 검은 영역의 넓이'를 구할 때, 겹치는 부분의 넓이도 고려를 해야 합니다. 이 문제는 100 x 100 사이즈의 2차원 배열을 만든 후, 색종이가 놓일 부분의 인덱스를 구해서, 총 인덱스의 개수를 알면 문제가 쉽게 해결이 됩니다. 정답 코드 const fs = require("fs"); const [amount, ...papers] = fs ... 2023. 3. 31.
[백준JS] 1316. 그룹 단어 체커 안녕하세요. 박기린 입니다. 백준 1316번 그룹 단어 체커 문제를 풀어봅시다. 문제 링크 https://www.acmicpc.net/problem/1316 문제 해석 '그룹 단어'라는 말이 이 문제의 핵심 단어입니다. 위의 메모를 살펴보면, - a, b, c의 갯수는 상관 없고 (1개만 있어도 상관 없습니다.) - 같은 글자는 뭉쳐 있어야 하며, 만약 하나라도 떨어져 있으면 그룹 단어가 아닙니다. 정답 코드 const fs = require("fs"); const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n"); const [amount, ...strings] = input; let result = 0; const isGroupW.. 2023. 3. 24.