문제 한 변의 길이가 N인 정사각형 모양의 마을 M을 만드는 중이다. 마을의 모든 칸에는 건물이 하나씩 있고 r번째 행, c번째 열에해당하는 칸에는 정수 Mrc가 적혀있다. Mrc는 해당 칸에 있는 건물의 유형에 해당한다. 건물의 유형이 동일하면서, 서로 상하좌우에 인접한 건물끼리는 서로 전력을 공유할 수 있다. 전력을 공유할 수 있는 건물의 개수가 K개 이상이면 이를 단지라고 한다. 플레이어는 단 하나의 발전기만 설치할 수 있다. 발전기는 특정 건물의 유형 하나에 해당하는 모든 단지에 전력 공급이 가능하다. 가장 많은 단지가 있는 건물 유형에 전력을 공급할 것인데, 건물 유형이 여러개라면 Mrc가 더 큰 건물 유형에 전력을 공급한다. 전력을 공급해야 할 건물의 유형 번호를 구해보자. 코드 const r..
문제 한 변의 길이가 N인 정사각형 마을 M이 있다. r번째 행, c번째 열에 하당하는 칸 Mrc에는 0과 1이 적혀있다. 0이면 아무것도 없는 칸이고 1이면 집이 있는 칸이다. 마을에 있는 집에 전력을 공급하기 위해선 그 집에 발전기를 설치하거나, 상하좌우로 인접한 집 중 하나가 전력을 공급받고 있어야 한다. 마을 M의 모든 집에 전력을 공급할 경우, 발전기의 최소 갯수를 구하여라 코드 const readline = require('readline'); let rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let input = []; rl.on('line', (line) => { input.push(li..
문제 게임에 통증이라는 시스템이 있음. 게임 안에는 통증 수치를 감소시켜 주는 아이템인 A와 B가 있음. 각 아이템은 사용시 각각 A, B만큼 통증을 감소시켜 줌. 각 아이템은 원하는대로 획득 가능 N의 통증 수치가 주어졌을 때, 통증 수치를 0으로 만들 수 있는 아이템 A와 B의 최소 사용 갯수를 구해야 함 코드 const readline = require('readline'); let rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let input = []; rl.on('line', (line) => { input.push(line.trim()) }).on('close', () => { const N ..
문제 N x N 행렬에서 특수한 게임이 진행된다. 각 칸에는 에 해당하는 방향으로 칸 만큼 한칸씩 이동하라는 지시가 적혀있다. 플레이하는 사람은 처음에 보드의 칸 중 하나에 말을 하나 올려놓는다. 각 칸에 적힌 지시대로 말을 이동한다. 만약 이동 중 말이 보드 밖으로 나간다면, 보드의 반대쪽의 첫번째 칸으로 이동한다. 이동거리가 남아있다면 계속 이동한다. 만약 이동하다가, 자신의 말이 한번이라도 방문한 칸을 다시 지나야 할 경우에는 게임이 종료된다. 그 외의 경우에는 게임이 종료될 때까지 위의 단계를 반복한다. 게임의 점수는 시작한 칸을 포함하여, 게임이 종료되기 전까지 말이 방문한 서로 다른 칸의 개수이다. 플레이어는 goorm과 player 두명이고, 각 게임은 별개로 이루어진다. goorm과 pla..
문제 N x N 크기의 행렬이 주어진다. 행렬은 땅의 상태로 채워진다. 행렬의 각 좌표에는 폭탄이 떨어지는데, 폭탄은 땅의 상태에 비례하여 점수가 계산된다. 폭탄 좌표에 해당하는 땅의 상태가 @일 경우 해당 행렬 위치의 폭탄값은 2씩 증가한다. 폭탄 좌표에 해당하는 땅의 상태가 0일 경우 해당 행렬 위치의 폭탄값은 1씩 증가한다. 폭탄 좌표에 해당하는 땅의 상태가 #일 경우 해당 행렬 위치의 폭탄값 계산은 무시된다. 최초 폭탄값은 모두 0이고, N x N 행렬로 제작된다. 코드 const readline = require('readline'); let rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let ..
문제 통증을 각각 14, 7, 1 만큼 줄여줄 진통제가 각각 존재한다. 통증이 주어졌을 때, 모든 통증을 줄여줄 수 있는 최소한의 진통제 사용량을 찾아서 리턴하라 코드 const readline = require('readline'); let rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let pain = 0; rl.on('line', (line) => { pain = parseInt(line) }).on('close', () => { let answer = 0 for (let i of [14, 7, 1]) { answer += Math.floor(pain / i) pain = pain % i } con..
문제 N과 K, N x N 행렬이 주어진다. N은 행렬의 좌우 길이이고, K는 찾고자 하는 특정 숫자이다. N x N 행렬에는 구름이 무작위로 생성된다. 구름은 1로 표시되고, 구름이 없으면 0으로 표시된다. 행렬의 각 요소를 모두 순회하되, 구름이 없는 행렬의 상하좌우, 대각선 8칸에 구름이 몇개 있는지를 체크하여 주변 구름 갯수가 K개와 같다면 카운트를 1 증가시킨다. 최종적으로 카운트를 리턴한다. 코드 const readline = require('readline'); let rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let input = []; rl.on('line', (line) => { in..
문제명 : 문자열 나누기 문제 길이가 N인 문자열 S가 주어진다. 문자열 S를 서로 겹치지 않는 3개의 부분 문자열로 나눠야 한다. 부분 문자열은 모두 길이가 1 이상이어야 하고, 원래 문자열에서 연속해야 한다. 문자열을 나누는 방법에 따라 플레이어는 점수를 얻을 수 있다. 점수 계산 방법은 아래와 같다. 문자열 S를 위 조건에 따라 3개의 부분문자열로 나눴을 때 등장하는 모든 부분 문자열을 중복제거하고 사전순으로 정렬한 결과를 P라고 하자. 나누어진 3개의 문자열이 각각 P에서 i, j, k번째로 등장하는 문자열이라면 얻을 수 있는 점수는 i + j + k 이다. abcd라는 문자열을 3개의 부분문자열로 나누는 방법은 {a, b, cd}, {a, bc, d}, {a, b, cd} 가 있다. 위의 원소들..
문제명 : 이진수 정렬 문제 N개의 10진수 정수가 배열로 주어진다. 이 정수를 2진수로 나타내고, 1의 갯수를 기준으로 내림차순 정렬한다. 1의 개수가 같다면 원래 10진수를 기준으로 내림차순 정렬한다. 입력 첫째 줄에 정수의 수 N이 주어지고, 찾으려는 정수의 위치 K가 공백을 두고 주어진다. 둘째 줄에 정수 a1, a2, ..., an이 공백을 두고 주어진다. 제약조건 입출력 예시1 입력 8 6 1 2 3 4 5 6 7 8 출력 4 풀이 const readline = require('readline'); let rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); let input = []; rl.on('l..
문제명 : 합 계산기 문제 여러개의 계산식을 입력받은 뒤, 각각의 계산 결과를 모두 합해서 출력하는 기능을 만들어라. 합 계산식에 입력할 수 있는 계산식은 아래 조건을 만족한다. 계산식은 정수, 연산기호, 정수 형태이다. 연산기호는 더하기, 빼기, 곱하기, 나누기 네 가지 사칙 연산 기호가 들어갈 수 있다. 이 때 나눗셈 결과의 나머지는 버린다. 입력 첫째 줄에 식의 갯수 T가 주어진다. 다음 T개의 줄에는 계산식이 주어진다. 제약조건 입출력 예시1 입력 3 1 + 3 4 / 3 3 - 2 출력 6 풀이 const readline = require('readline'); let rl = readline.createInterface({ input: process.stdin, output: process.s..