문제 링크 https://www.acmicpc.net/problem/21869 21869번: Maximum Bishop 체스에는 대각선 방향으로 움직일 수 있는 비숍(bishop)이 있다. 다음 그림과 같은 $5\times5$ 정사각형 체스판 위의 B라고 표시된 곳에 비숍이 있을 때, 비숍은 대각선 방향으로 움직여 X로 표시된 www.acmicpc.net 풀이 간단하게 풀 수 있습니다. 첫 열의 모든 칸에 비숍을 깔아주고, 1행, n행을 제외한 마지막 열의 모든 칸에 비숍을 깔아주면 됩니다. 정답 코드 const fs = require('fs'); const stdin = fs.readFileSync('/dev/stdin').toString().split('\n'); const input = (() =>..
문제 링크 https://www.acmicpc.net/problem/21868 21868번: 미적분학 입문하기 첫 번째 줄에는 양수 $\epsilon$을 분수로 표현했을 때의 분자와 분모가 공백으로 구분되어 주어진다. 각 분자와 분모는 $1$ 이상 $10\,000$ 이하의 자연수다. 두 번째 줄에는 일차 이하의 다항함수 $f www.acmicpc.net 풀이 엡실론-델타 논법을 공부한지 좀 되어서 다음 글을 참고하였습니다. 엡실론 델타 논법(ε-δ 논법)으로 함수의 극한 더 잘 이해하기 - 류모찌 주어진 다항 함수를 다음처럼 씁시다. $$f(x) = ax + b$$ 문제에서 요구하는 $L$은 극한값이므로, 단순히 $f(x_0)$ 값을 구해주면 됩니다. 다음으론 $\delta$의 최댓값을 구해야합니다. 위..
문제 링크 https://www.acmicpc.net/problem/21867 21867번: Java Bitecode 첫째 줄에 코드의 길이를 나타내는 정수 $N$이 주어진다. ($1 \leq N \leq 200\,000$) 둘째 줄에 알파벳 대문자로 이루어진 코드 $S$가 주어진다. www.acmicpc.net 풀이 정규 표현식을 이용합시다. 문자열 내에 'J', 'A', 'V' 중 해당되는게 있다면 빈 문자열로 치환해주면 됩니다. 정답 코드 const fs = require('fs'); const stdin = fs.readFileSync('/dev/stdin').toString().split('\n'); const input = (() => { let line = 0; return () => std..
문제 링크 https://www.acmicpc.net/problem/21866 21866번: 추첨을 통해 커피를 받자 첫 번째 줄에 9개의 정수가 주어진다. 각 정수는 $0$ 이상 $1\,000$ 이하의 정수다. 각 정수는 해당 학생이 각 문제에서 얻은 점수를 의미한다. www.acmicpc.net 풀이 1) 점수의 합을 구해줍니다. 2) 최대 점수를 넘는 문제가 있는지 확인해줍니다. 3) 주어진 조건에 따라 정답을 출력합시다. 정답 코드 const fs = require('fs'); const stdin = fs.readFileSync('/dev/stdin').toString().split('\n'); const input = (() => { let line = 0; return () => stdin[..
문제 링크 www.acmicpc.net/problem/21737 21737번: SMUPC 계산기 SMUPC를 기념하기 위해 ALGOS와 DSC Sookmyung에서는 SMUPC의 각 글자로 계산이 이루어지는 계산기를 만들었다. 가은이와 혜민이는 이 계산기와 같은 방식으로 작동하는 프로그램을 만들고자 한다. 가은 www.acmicpc.net 풀이 간단한 구현문제입니다. 문자열 파싱은 자바스크립트가 편합니다. 1) 정규표현식으로 수와 연산자를 분리해줍시다. /[0-9]+/는 연속한 숫자를, /[A-Z]/는 대문자를 뽑습니다. 2) 규칙에 맞게 계산해줍시다. 3) 정답을 출력합니다. 정답 코드 const fs = require('fs'); const stdin = fs.readFileSync('/dev/std..
문제 링크 www.acmicpc.net/problem/16935 16935번: 배열 돌리기 3 크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 → www.acmicpc.net 풀이 귀찮은 구현 문제입니다. 자바스크립트로 풀었습니다. 이런 류의 문제에서는 구현해둔 함수를 이용하는 게 코드량을 줄이는 포인트입니다. 1) 상하 반전은 행의 순서를 reverse() 함수를 이용해 바꿔주면 됩니다. 2) 좌우 반전은 각 행마다 reverse() 함수를 적용하여 열의 순서를 바꿔줍니다. 3) 오른쪽 90도 ..
문제 링크 programmers.co.kr/learn/courses/30/lessons/77485 코딩테스트 연습 - 행렬 테두리 회전하기 6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3] programmers.co.kr 풀이 1) 배열을 1부터 순서대로 채워줍니다. 2) 시계 방향으로 회전을 시켜야 하니까, 반시계 방향으로 순회하며 값을 복사해줍니다. 3) 정답 리턴 정답 코드 function solution(rows, columns, queries) { const board = Array(rows).fill().map((row, i) => Array(column..
문제 링크 programmers.co.kr/learn/courses/30/lessons/77486 코딩테스트 연습 - 다단계 칫솔 판매 민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후, programmers.co.kr 풀이 칫솔을 팔아서 한 번에 얻을 수 있는 이익이 최대 10,000원이고, 10%씩 부모에게 상납해야 하므로 최대 5세대 위의 부모까지만 상납하면 됩니다. 1) 각 사람의 부모를 저장해줍니다. 2) 사람과 이익금이 주어졌을 때 부모에게 10%씩 상납하는 함수를 만듭니다. 3) 각 칫솔 판매마다 재귀적으로 돌려줍시다. ES2015 이후로 객체 프로퍼티의 키가 s..
문제 링크programmers.co.kr/learn/courses/30/lessons/68645코딩테스트 연습 - 삼각 달팽이5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]programmers.co.kr 풀이문제의 요구대로 시뮬레이션해줍시다.아래 방향, 오른쪽 방향, 윗 방향의 순서대로 값을 채웁니다.이때 $n, n-1, n-2, ..., 1$개씩 채워주면 됩니다. 각 동작을 함수로 구현하고 적절한 시작점과 길이를 넘겨줍시다. 정답 코드let ans, num = 1; const down = (x, y, l) => { if(l == 0) return; for(let k = 0; k..
문제 링크programmers.co.kr/learn/courses/30/lessons/68936?language=javascript#코딩테스트 연습 - 쿼드압축 후 개수 세기[[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15]programmers.co.kr 풀이재귀 함수를 이용하면 됩니다. 1) 배열의 모든 수의 합을 구합니다. 이때 n차원 배열을 풀어주는 flat() 함수를 이용하면 편합니다. fla..