목록전체 글 (308)

https://www.acmicpc.net/problem/21316 문제 해결 방식 별 'Spica'와 연결된 노드는 총 3개며, 연결된 각 노드는 1, 2, 3개의 노드와 연결되어 있다는 특징을 발견하면 어렵지 않은 문제. 그리고 이와 같은 특징은 spica가 유일하기에, 위 조건을 만족하는 노드를 답으로 출력하였다. (문제에서는 6번 노드가 1개와 연결 | 8번 노드가 2개와 연결 | 3번 노드가 3개와 연결되어 있다.) 전체 소스 코드 const fs = require("fs"); const input = fs .readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt") .toString() .trim() .split("\n"); fu..

https://www.acmicpc.net/problem/18111 문제 해결 방식 문제에서 중요한 힌트는 땅의 높낮이는 256 이하라는 것에서 착안해, 0부터 256까지의 자연수 x를 대입했을 때의 '걸리는 시간'을 모두 구하는 식으로 접근했다. (여기서, 박스의 갯수도 체크해야 하는데, 해당 자연수 x로 모든 땅을 고르게 만들 때의 박스가 부족한 경우는 Infinity 를 반환토록 하여 정답에서 배제하였다.) 이후, 256개의 원소를 담을 수 있는 공간에 해당 값들을 저장한 뒤, 가장 시간이 짧게 걸린 값을 찾았다. (이때, 최소 '걸리는 시간'이 같은 경우가 있을 때는, 가장 땅 높이가 높은 값을 추출해야 하므로, lastIndexOf 메서드를 활용하였다.) 전체 소스 코드 const fs = re..

https://www.acmicpc.net/problem/17087 문제 해결 방식 수빈이가 자신의 위치 기준, +D 혹은 -D로만 이동할 수 있다는 점에서 해결 방식을 찾았다. 만약 수빈이의 위치가 0, 동생들의 위치가 [2,8]라면 2 * 1 로 2로 이동, 2 *4 로 8로 이동할 수 있기 때문에 이때 2는 모든 동생을 찾을 수 있는 값이 된다. 그리고 이 값은 2와 8의 최대공약수. 따라서, 수빈이 위치를 기준으로 동생들의 거리를 구한 뒤 동생들의 거리의 최대공약수를 구하면 된다. 이때 이 최대공약수를 구하는 알고리즘은 유클리드 호제법을 활용하면 되는데, 유클리드 호제법이란 두 개의 정수를 나누어가며 최대공약수를 찾는 방식이라고 말할 수 있다. 전체 소스 코드 const fs = require("..

https://www.acmicpc.net/problem/5637 해당 문제는 전체 텍스트에서 가장 긴 단어를 소문자로 출력하는 문제다. 다만, 단어는 영문과 하이픈으로만 구성된 단어로만 친다. 문제 해결 방식 먼저 각 문자별로 나누는 과정이 필요했는데, 이때 flat 메서드로 2차원 배열의 문자열을 병합했다. 이후 각 문자열마다 영문, 하이픈만을 추출하는 방식은 정규표현식을 적용하였다. (해당 정규표현식은 gpt를 활용) 그리고 문자열 순회마다 해당 문자열의 길이가 최댓값보다 큰지 확인한 뒤, 크다면 가장 큰 값을 갱신하는 방식으로 로직을 마무리지었다. 전체 소스 코드 const fs = require("fs"); const input = fs .readFileSync(process.platform =..

https://www.acmicpc.net/problem/14382 문제 해결 방식 입력값 x가 존재한다고 할 때, x * i (이때 i는 1부터 계속 증가)를 구해나가며, 이 해당 값을 문자값으로 형변환하고 분할하여 set에 추가하는 방식으로 구현했다. 여기서 set은 중복된 원소를 제거하기 때문에, set의 크기가 10인 경우는 곧 0 ~ 9까지의 원소가 모두 등장한 상황이 된다. 이때는 반복문을 중단시켜 가장 마지막에 호출된 x * i 를 정답으로 출력했다. 입력값 x가 0인 경우는 어떤 수를 계속 곱해도 0이라 1 ~ 9까지의 원소가 등장할 수 없기 때문에, 바로 문제에서 제시된 'INSOMNIA'를 출력하면 된다. 전체 소스 코드 const fs = require("fs"); const inpu..

https://www.acmicpc.net/problem/22252 문제 해결 방식 고릴라(상인)의 이름이 모두 영문으로 주어지고, 각 상인에 따라 가진 정보들을 구분할 수 있어야 하기 때문에, 이름에 따라 해싱하는 과정을 먼저 거쳤다. 이후에는 해당 상인이 정보를 얻는 것인지 혹은 호석이가 정보를 구매하는 것인지에 따라 나누어, 정보를 얻는 경우에는 해당 상인의 해싱값에 맞게 최대 힙에 데이터를 적재했다. (호석이는 기본적으로 정보를 구매할 때, 정보의 크기가 큰 순으로 구매하기 때문에 구매 과정에서 이를 효율적으로 하기 위해서는 최대힙으로 구현해야 했다. 이때 node.js는 최대 힙 지원이 되지 않아 구글에서 타인이 구현한 최대 힙 소스 코드를 가져와썼다.) 그리고 만약 정보를 구매하는 경우에는 해..

https://www.acmicpc.net/problem/15702 문제는 각 문제의 배점과 각 사람들의 결과가 주어졌을 때, 가장 높은 점수를 획득한 사람과 그 점수를 구하는 문제다. 문제 해결 방식 각 사람에 따라 획득한 점수를 구한 뒤 만약 해당 점수가 최댓값을 넘는다면, 최댓값과 현재 가장 높은 점수인 수험번호를 갱신하고 해당 점수와 최댓값이 같다면 해당 사람의 수험 번호만 갱신했다. 전체 소스 코드 const fs = require("fs"); const input = fs .readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt") .toString() .trim() .split("\n"); function solution(dat..

https://www.acmicpc.net/problem/1895 문제 해결 방식 문제에서 주어진 N * M 크기의 이미지를 모두 3 * 3의 크기로 분할한 뒤, 해당 구간에 포함된 모든 원소를 정렬하여 중앙값을 구하고 해당 중앙값이 T보다 크거나 같다면 결괏값에 추가하는 방식으로 로직을 구현하였다. 전체 소스 코드 const fs = require("fs"); const input = fs .readFileSync(process.platform === "linux" ? "/dev/stdin" : "입력.txt") .toString() .trim() .split("\n"); function solution(data) { const T = +data.pop(); const [[N, M], ...arr] =..