알고리즘 연습

알고리즘 연습

[알고리즘 연습] 백준 2503 (숫자 야구, 자바스크립트)

문제 2503번: 숫자 야구 첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트 www.acmicpc.net 풀이 시간복잡도가 최악의 경우 약 9 * 9 * 9 * 100 * 3 * 3으로 충분히 완전 탐색으로 풀 수 있었다. 세자리 숫자 중 중복이 존재하는 경우에는 해당 숫자는 확인하지 않고 넘어갔다. 해당 문자의 스트라이크와 볼을 구하는 과정에서 indexOf를 사용했다. check 변수를 통해 모든 조건이 만족하는 경우에 answer 값을 +1 증가시켰다. 소스 코드 const filePath = process.platform === "linux" ? "/d..

알고리즘 연습

[알고리즘 연습] 백준 13023 (ABCDE, 자바스크립트)

문제 13023번: ABCDE 문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다. www.acmicpc.net 소스 코드 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(Number); const graph = []; for (let i = 0; i < N; i++) graph[i] = []; for (let i = 1; i = 5) { flag = true; r..

알고리즘 연습

[알고리즘 연습] 백준 17626 (Four Squares, 자바스크립트)

문제 17626번: Four Squares 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1 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 dp = new Array(n + 1).fill(0); dp[1] = 1;..

알고리즘 연습

[알고리즘 연습] 백준 16937 (두 스티커, 자바스크립트)

문제 16937번: 두 스티커 첫째 줄에 모눈종이의 크기 H, W, 둘째 줄에 스티커의 수 N이 주어진다. 다음 N개의 줄에는 스티커의 크기 Ri, Ci가 주어진다. www.acmicpc.net 풀이 전체 스티커의 갯수와 상관없이 2개의 스티커만 붙이면 되기 때문에 이중 for문을 사용했다. 두 스티커는 4가지 케이스로 붙여질 수 있다. (기본, 기본), (기본, 90도 회전), (90도 회전, 기본), (90도 회전, 90도 회전) 각 케이스마다 두 스티커를 가로와 세로 모두 연결할 수 있다. 가로로 연결한 경우 너비는 더하기가 되고 높이는 최댓값이 된다. 반면, 세로로 연결한 경우 너비는 최댓값이 되고 높이는 더하기가 된다. 소스 코드 const filePath = process.platform ==..

알고리즘 연습

[알고리즘 연습] 백준 14501 (퇴사, 자바스크립트)

문제 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 풀이 N의 최댓값이 15이기 때문에 조합 알고리즘을 활용해 구현했다. 마땅한 브레이크 포인트가 없기 때문에 dfs를 한 번 돌 때마다 계속 최댓값을 갱신한다. (N + 1까지 요일이 지나지 않는 경우가 존재) 선택한 상담의 T을 더해가며 dfs를 수행하고 지금까지 더해진 day를 다음 dfs의 시작점으로 지정한다. 이익을 구할 때는 정해진 기간 안에 진행할 수 있는 상담의 금액만 더한다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = require("fs") .read..

알고리즘 연습

[알고리즘 연습] 백준 18808 (스티커 붙이기, 자바스크립트)

문제 18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연 www.acmicpc.net 풀이 시간복잡도가 40 * 40 * 100 * 4 으로 충분히 완전 탐색으로 풀 수 있는 문제였다. 노트북와 스티커를 비교할 때 스티커가 노트북의 범위를 벗어나지 않도록 범위를 지정해준다. 스티커의 값도 1이고 노트북의 값도 1이면 해당 위치에 스티커를 붙일 수 없다. 스티커의 세로의 길이와 가로의 길이가 다를 수 있기 때문에 회전 시 세로의 길이와 가로의 길이를 스왑해준다. 소스 코드 const filePath = process.platform === "li..

알고리즘 연습

[알고리즘 연습] 백준 16508 (전공책, 자바스크립트)

문제 16508번: 전공책 곧 졸업을 앞둔 민호는 대학교 생활 동안 구매만 해놓고 한 번도 펴보지 않은 전공책에 먼지가 쌓여 있는 것을 보고는, 이 책들을 어떻게 처리해야 할지 고민 중이다. 열심히 고민한 끝에 민호는 www.acmicpc.net 풀이 N과 W의 범위가 크지 않다고 생각해서 조합 알고리즘을 통해 구현했고 다행히 시간초과가 발생하지 않았다. 하나의 전공서적 이름의 문자를 탐색하여 찾는 단어가 있으면 제거하고 다음 dfs로 이동한다. 단어의 모든 문자가 제거된 경우 최소 가격을 갱신하고 dfs를 종료한다. 자바스크립트에서 배열은 참조값이라서 원본 배열을 훼손시키지 않기 위해 깊은 복사를 수행했다. 소스 코드 const filePath = process.platform === "linux" ?..

알고리즘 연습

[알고리즘 연습] 백준 17836 (공주님을 구해라!, 자바스크립트)

문제 17836번: 공주님을 구해라! 용사는 마왕이 숨겨놓은 공주님을 구하기 위해 (N, M) 크기의 성 입구 (1,1)으로 들어왔다. 마왕은 용사가 공주를 찾지 못하도록 성의 여러 군데 마법 벽을 세워놓았다. 용사는 현재의 가지고 있는 www.acmicpc.net 소스 코드 class Queue { constructor() { this.dat = []; this.head = 0; this.tail = 0; } push(item) { this.dat[this.tail++] = item; } pop() { this.head++; } front() { return this.dat[this.head]; } rear() { return this.dat[this.tail - 1]; } isEmpty() { ret..

알고리즘 연습

[알고리즘 연습] 백준 14502 (연구소, 자바스크립트)

문제 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 소스 코드 class Queue { constructor() { this.dat = []; this.head = 0; this.tail = 0; } push(item) { this.dat[this.tail++] = item; } pop() { this.head++; } front() { return this.dat[this.head]; } rear() { return this.dat[this.tail - 1]; } isEmpty() { return this.head ==..

알고리즘 연습

[알고리즘 연습] 백준 5547 (일루미네이션, 자바스크립트)

문제 5547번: 일루미네이션 첫째 줄에 두 개의 정수 W와 H가 주어진다. (1 ≤ W, H ≤ 100) 다음 H줄에는 상근이네 집의 건물 배치가 주어진다. i+1줄에는 W개의 정수가 공백으로 구분되어 있다. j번째 (1 ≤ j ≤ w) 정수의 좌표는 www.acmicpc.net 소스 코드 class Queue { constructor() { this.dat = []; this.head = 0; this.tail = 0; } push(item) { this.dat[this.tail++] = item; } pop() { this.head++; } front() { return this.dat[this.head]; } rear() { return this.dat[this.tail - 1]; } isEmpt..

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