본문 바로가기

알고리즘21

[백준/nodeJS] 11375. 열혈강호 (이분매칭 문제) 안녕하세요. 박기린입니다. 백준 11375번 열혈강호 문제 풀어보겠습니다. 문제 링크 https://www.acmicpc.net/problem/11375 11375번: 열혈강호 강호네 회사에는 직원이 N명이 있고, 해야할 일이 M개가 있다. 직원은 1번부터 N번까지 번호가 매겨져 있고, 일은 1번부터 M번까지 번호가 매겨져 있다. 각 직원은 한 개의 일만 할 수 있고, 각각 www.acmicpc.net 문제 해석 이 문제는 이분 매칭에 대해서만 알면 쉽게 풀 수 있습니다. 이분 매칭에 대한 설명을 다른 분이 너무 쉽게 잘 적어주셔서, 링크를 적어놓겠습니다. 링크 : https://blog.naver.com/kks227/220807541506 이분 매칭(Bipartite Matching) 이번에 올릴 글은.. 2024. 3. 24.
[백준/nodeJS] 14935. FA 안녕하세요. 박기린입니다. 백준 14935번 FA 문제 풀어보겠습니다. 문제 링크 https://www.acmicpc.net/problem/14935 문제 해석 결론부터 말씀드리자면, 모든 수는 FA수입니다. 10만자리의 수일지라도, 'x의 첫 자리'와 'x의 자리수'를 곱한 결과는 아무리 커봐야 9 * 9 = 81 입니다. 그리고 81은 결국 F(x)에 의해 8로 전환되고, F(8)은 8 * 1 = 8이 되어, 동일한 수가 나옵니다. 즉, FA수가 됩니다. 정답 코드 & 해설 console.log("FA"); 모든 수가 FA수이기 때문에, 입력과 상관없이 FA만 출력해주면 끝입니다. 2024. 2. 29.
[백준/nodeJS] 1016. 제곱 ㄴㄴ 수 안녕하세요. 박기린입니다. 백준 1016번 제곱ㄴㄴ수 문제 풀어보겠습니다. 문제 링크 https://www.acmicpc.net/problem/1016 문제 해석 '제곱ㄴㄴ수'가 무엇일까요? 위 메모처럼, n의 제곱으로 나눴을 때 나머지가 없는 수를 제곱ㅇㅇ수라고 표현하고, 그 반대를 제곱ㄴㄴ수라고 문제에서 표현합니다. 정답 코드 const fs = require("fs"); const [min, max] = fs .readFileSync("/dev/stdin") .toString() .trim() .split(" ") .map(Number); const isDivided = Array(1000001).fill(false); // max와 min 사이에 들어가는 최대 수, ㄴㄴ제곱이 아닌 수가 true... 2024. 1. 26.
[백준/nodeJS] 2740. 행렬 곱셈 안녕하세요. 박기린입니다. 백준 2740번 행렬 곱셈 문제 풀어보겠습니다. 문제 링크 https://www.acmicpc.net/problem/2740 문제 해석 행렬 곱셈에 대해 사전 지식이 있다면 쉽게 폴 수 있습니다. 하지만 그렇지 못한 분도 있기에 간단하게 설명해보겠습니다. 문제에서 예시 입력으로 주어진 두 개의 행렬입니다. [3 * 2] 와 [2 * 3]으로 이루어진 행렬이고, N은 3, M은, K는 3입니다. 행렬의 크기는 N * K로 구할 수 있기 때문에, [3 * 3]임을 미리 알고 시작합니다. N과 K가 1일 때의 값을 구해보겠습니다. 이때 행렬 곱셈 방법은 이러합니다. 1. 첫 번째 행렬에서 N이 1인 행을 찾습니다. 2. 두 번째 행렬에서 K가 1인 열을 찾습니다. 3. 행일 경우 맨.. 2023. 12. 29.
[백준/nodeJS] 28279. 덱 2 안녕하세요. 박기린 입니다. 백준 28279번 덱 2 문제를 풀어보겠습니다. 문제 링크 https://www.acmicpc.net/problem/28279 28279번: 덱 2 첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000) 둘째 줄부터 N개 줄에 명령이 하나씩 주어진다. 출력을 요구하는 명령은 하나 이상 주어진다. www.acmicpc.net 문제 해석 덱(deque)을 구현하는 것이 목표입니다. front, rear의 초기값은 -1입니다. -1은 덱 안에 아무것도 없다는 의미를 가집니다. JS의 pop, shift, push, unshift 메소드를 사용하는 방법도 있지만, 시간초과가 됩니다. 그렇기에 front와 rear의 주소를 이용하는 방식으로 코드를 짜야 합니다. 값이.. 2023. 12. 21.
[백준/JS] 12789. 도키도키 간식드리미 안녕하세요. 박기린 입니다. 백준 12789번 도키도키 간식드리미 문제를 풀어보겠습니다. 문제 링크 https://www.acmicpc.net/problem/12789 12789번: 도키도키 간식드리미 인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두 www.acmicpc.net 문제 해석 Input 배열 : 백준 문제에서 준 입력값을 담은 배열. 큐 구조를 이용할 예정입니다. Stack 배열 : 임시로 줄 선 사람을 옮겨둘 수 있는 공간 cur : 간식을 받을 차례 위 3가지를 먼저 염두에 둡니다. 가장 먼저 1번 순서가 받을 차례이기 때문에 cur을 1로 설정합니다. .. 2023. 12. 7.
[백준JS] 16139. 인간-컴퓨터 상호작용 안녕하세요. 박기린 입니다. 백준 16139번 인간-컴퓨터 상호작용 문제를 풀어봅시다. 문제 링크 https://www.acmicpc.net/problem/16139 문제 해석 giraffe라는 글자와 [i 0 3]이라는 질문이 주어졌다고 가정합니다. giraffe 문자열 중, 0번째부터 3번째까지의 글자 중에 i가 있는지 검사합니다. i가 하나 있으므로, 1을 출력하면 정답입니다. 하지만, 매번 일일이 for문으로 모든 질문을 검사하게 된다면, 200,000자의 문자와 200,000개의 문제를 견뎌내기 힘들 것입니다. 그래서 누적합 방식을 사용합니다. 위처럼 f에 대한 질문이 여러 개 있을 경우, 미리 f의 갯수를 세어놓은 데이터를 만들어서, f 질문 때마다 뽑아쓰면 효율적일 것입니다. DP라는 {ke.. 2023. 6. 26.
[백준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.