알고리즘 연습

알고리즘 연습

[알고리즘 연습] 백준 18430 (무기 공학, 자바스크립트)

문제 18430번: 무기 공학 첫째 줄에는 길동이가 가지고 있는 나무 재료의 세로, 가로 크기를 의미하는 두 자연수 N, M이 주어진다. (1 ≤ N, M ≤ 5) 다음 N개의 줄에 걸쳐서, 매 줄마다 나무 재료의 각 위치의 강도를 나타내 www.acmicpc.net 풀이 dfs의 인수로 현재의 좌표값을 넣어주는데 이렇게 하면 이중 for문을 사용하지 않아도 된다. 하나의 좌표(x, y)에서 부메랑을 만드는 경우의 수는 5가지로 스킵, (-1, -1), (-1, 1), (1, -1), (1, 1) 이다. 해당 좌표가 이미 사용된 영역이라면 스킵만 수행하고 나머지 경우는 수행하지 않는다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin"..

알고리즘 연습

[알고리즘 연습] 백준 6443 (애너그램, 자바스크립트)

문제 6443번: 애너그램 첫째 줄에 단어의 개수 N 이, 둘째 줄부터 N개의 영단어가 들어온다. 영단어는 소문자로 이루어져 있다. 단어의 길이는 20보다 작거나 같고, 애너그램의 수가 100,000개 이하인 단어만 입력으로 주 www.acmicpc.net 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = require("fs") .readFileSync(filePath) .toString() .trim() .split("\n"); const N = +input[0]; const words = []; let result = []; let answer = ""; let visited..

알고리즘 연습

[알고리즘 연습] 백준 3980 (선발 명단, 자바스크립트)

문제 3980번: 선발 명단 각각의 테스트 케이스에 대해서, 모든 포지션의 선수를 채웠을 때, 능력치의 합의 최댓값을 한 줄에 하나씩 출력한다. 항상 하나 이상의 올바른 라인업을 만들 수 있다. www.acmicpc.net 풀이 능력치의 합의 최대값을 구해야 하기 때문에 선수 11명이 모든 포지션을 선택받을 수 있게 dfs를 수행한다. (idx가 선수 번호) 이미 누군가 배정받은 포지션이거나 해당 선수의 해당 포지션 능력치가 0인 경우 예외 처리를 해준다. 선수 11명이 모두 포지션을 배정받은 경우 최대값을 갱신해준다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = requir..

알고리즘 연습

[알고리즘 연습] 백준 1174 (줄어드는 수, 자바스크립트)

문제 1174번: 줄어드는 수 음이 아닌 정수를 십진법으로 표기했을 때, 왼쪽에서부터 자리수가 감소할 때, 그 수를 줄어드는 수라고 한다. 예를 들어, 321와 950은 줄어드는 수이고, 322와 958은 아니다. N번째로 작은 줄어드는 www.acmicpc.net 풀이 숫자는 반드시 줄어들어야 하기 때문에 arr는 9부터 0까지 역순으로 저장한다. 조합 알고리즘을 사용하여 1자리부터 10자리까지의 줄어드는 수를 모두 구한다. 줄어드는 수를 모두 구한 뒤 저장한 배열을 오름차순 정렬하면 N번 째 수를 쉽게 구할 수 있다. N이 구할 수 있는 숫자의 범위를 초과하는 경우 -1를 출력한다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin"..

알고리즘 연습

[알고리즘 연습] 백준 14712 (넴모넴모, 자바스크립트)

문제 14712번: 넴모넴모 (Easy) 네모는 뿌××× 게임에 깊은 감명을 받아, 직사각형 모양의 격자판과 “넴모”라는 수수께끼의 생물을 이용하는 “넴모넴모”라는 게임을 만들었다. 이 게임의 규칙은 아주 간단하다. 격자판의 www.acmicpc.net 풀이 모든 위치에 넴모를 배치한 경우 그렇지 않은 경우 2가지 탐색을 모두 진행한다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = require("fs") .readFileSync(filePath) .toString() .trim() .split("\n"); const [N, M] = input[0].split(" ").map..

알고리즘 연습

[알고리즘 연습] 백준 16987 (계란으로 계란치기, 자바스크립트)

문제 16987번: 계란으로 계란치기 원래 프로그래머의 기본 소양은 팔굽혀펴기를 단 한 개도 할 수 없는 것이라고 하지만 인범이는 3대 500을 넘기는 몇 안되는 프로그래머 중 한 명이다. 인범이는 BOJ에서 틀린 제출을 할 때마다 턱 www.acmicpc.net 풀이 왼쪽부터 마지막 계란까지 손에 들 계란을 증가시켜야 하기 때문에 재귀를 돌 때마다 idx를 증가시킨다. 재귀 함수 내부 for문에서는 아직 깨지지 않은 계란을 선택해 치는 작업을 수행한다. 재귀를 돌고 복귀할 때 반드시 계란의 내구성을 원상복구 해준다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = require..

알고리즘 연습

[알고리즘 연습] 백준 14888 (연산자 끼워넣기, 자바스크립트)

문제 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱 www.acmicpc.net 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = require("fs") .readFileSync(filePath) .toString() .trim() .split("\n"); const N = +input[0]; const arr = input[1].split(" ").ma..

알고리즘 연습

[알고리즘 연습] 백준 13549 (숨바꼭질 3, 자바스크립트)

문제 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 소스 코드 const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; const input = require('fs') .readFileSync(filePath) .toString() .trim() .split('\n'); const [N, K] = input[0].split(' ').map(Number); const MAX_SIZE = 1000..

알고리즘 연습

[알고리즘 연습] 백준 10971 (외판원 순회 2, 자바스크립트)

문제 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net 풀이 주어진 모든 노드를 출발 지점으로 선택하여 각각 dfs를 수행한다. 출발 지점으로 다시 돌아와야 하기 때문에 처음에 출발 지점은 방문 표시하지 않는다. 모든 도시를 방문했고 마지막 도시가 출발 지점이라면 최솟값을 갱신해준다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = requir..

알고리즘 연습

[알고리즘 연습] 백준 1182 (부분수열의 합, 자바스크립트)

문제 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = require("fs") .readFileSync(filePath) .toString() .trim() .split("\n"); const [N, S] = input[0].split(" ").map(Number); const arr = input[1..

산본개발자
'알고리즘 연습' 카테고리의 글 목록 (3 Page)