백준

알고리즘 연습

[알고리즘 연습] 백준 21315 (카드 섞기, 자바스크립트)

문제 21315번: 카드 섞기 마술사 영재는 카드 더미를 이용한 마술을 개발하였다. 카드들에는 1부터 N까지의 숫자가 적혀있으며 초기 상태에는 1이 맨 위에 있으며 N개의 카드가 번호 순서대로 쌓여있다. 영재는 마술을 www.acmicpc.net 풀이 완전 탐색으로 2개의 k값을 찾는 컨셉 자체는 쉬웠는데 카드를 섞을 때 큐를 사용하지 않고 구현하는 방식이 까다로웠다. range(카드를 뺄 수 있는 범위), count(빼야되는 개수)를 통해 섞을 범위를 정해준다. 해당 범위에 속하는 모든 카드를 새로운 카드 배열에 옮겨주고 해당 위치는 0으로 설정한다. 다시 새로운 카드 배열에 있는 값을 기존 카드 배열로 옮겨준다. 소스 코드 const filePath = process.platform === "linu..

알고리즘 연습

[알고리즘 연습] 백준 14620 (꽃길, 자바스크립트)

문제 14620번: 꽃길 2017년 4월 5일 식목일을 맞이한 진아는 나무를 심는 대신 하이테크관 앞 화단에 꽃을 심어 등교할 때 마다 꽃길을 걷고 싶었다. 진아가 가진 꽃의 씨앗은 꽃을 심고나면 정확히 1년후에 꽃이 피므 www.acmicpc.net 풀이 N의 범위가 크지 않기 때문에 무식하게 완전 탐색으로 풀 수 있다. board의 모든 인덱스를 탐색하며 꽃을 심을 수 있는 곳을 찾는다. (dfs + 꽃 구조에 해당하는 위치 확인) 꽃을 심을 수 있으면 해당 구역의 visited를 true로 설정하고 다음 위치를 찾는 과정을 반복한다. (dfs) 재귀에서 빠져나올 때 반드시 해당 구역의 visited를 false로 설정한다. (추후 다시 사용해야 한다.) 소스 코드 const filePath = pr..

알고리즘 연습

[알고리즘 연습] 백준 14500 (테트로미노, 자바스크립트)

문제 14500번: 테트로미노 폴리오미노란 크기가 1×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, M] = input[0].split(" ").map(Number); const board = Array.from({ length: N }, ..

알고리즘 연습

[알고리즘 연습] 백준 16234 (인구 이동, 자바스크립트)

문제 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 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() { retu..

알고리즘 연습

[알고리즘 연습] 백준 20207 (달력, 자바스크립트)

문제 20207번: 달력 수현이는 일년의 날짜가 1일부터 365일로 표시되어있는 달력을 가지고있다. 수현이는 너무나도 계획적인 사람이라 올 해 일정을 모두 계획해서 달력에 표시해놨다. 여름이 거의 끝나가자 장 www.acmicpc.net 풀이 문제에서 주어진 일정을 시작일을 기준으로 오름차순 정렬한다. calendar 배열을 통해 날짜마다 몇 개의 일정이 존재하는지 구한다. 연속적으로 일정이 존재하면 width를 계속 증가시키고 height는 최대값으로 변경한다. 중간에 일정이 끊어지면 width와 height를 초기화한다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = req..

알고리즘 연습

[알고리즘 연습] 백준 7569 (토마토, 자바스크립트)

문제 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, 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() ..

알고리즘 연습

[알고리즘 연습] 백준 20164 (홀수 홀릭 호석, 자바스크립트)

문제 20164번: 홀수 홀릭 호석 호석이는 짝수랑 홀수 중에서 이니셜이 같은 홀수를 더 좋아한다. 운전을 하던 호석이는 앞차의 번호판이 홀수로 가득할 때 사랑스러움을 느낄 정도이다. 전화번호도 홀수만 있고 싶다. 그렇게 www.acmicpc.net 풀이 재귀를 돌면서 문자열의 길이에 따라 알맞은 동작을 수행한다. 문자열의 길이가 3 이상일 경우 3개의 문자열로 분리할 수 있는 모든 경우를 구한다. 홀수의 개수를 누적할 때는 계산이 완료된 숫자를 가지고 홀수의 개수를 구하기 때문에 문자열의 길이가 1인 경우 N 자체에 대해 홀수의 개수를 구한다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const..

알고리즘 연습

[알고리즘 연습] 백준 16926 (배열 돌리기 1, 자바스크립트)

문제 16926번: 배열 돌리기 1 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net 풀이 입력으로 주어진 N * M 배열을 R번 회전시킨 결과를 출력하는 문제이다. 회전은 반시계 방향으로 진행한다. 한번의 회전을 수행할 때 몇 개의 네모 형태를 회전 시켜야 하는지가 핵심인 문제였고 이를 구현하기 위해 min(N, M) / 2 공식을 이용했다. 처음에는 배열의 회전을 구현하기 위해 Queue를 사용하는 방법을 떠올렸다. 하지만, Queue를 사용하면..

알고리즘 연습

[알고리즘 연습] 백준 2668 (숫자고르기, 자바스크립트)

문제 2668번: 숫자고르기 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절 www.acmicpc.net 풀이 첫째 줄에서 숫자를 적절히 뽑으면, 그 뽑힌 정수들이 이루는 집합과, 뽑힌 정수들의 바로 밑의 둘째 줄에 들어있는 정수들이 이루는 집합이 일치한다. 이러한 조건을 만족시키도록 정수들을 뽑되, 최대로 많이 뽑는 방법을 구한다. 소스 코드 const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt"; const input = require("fs") .readFile..

알고리즘 연습

[알고리즘 연습] 백준 14940 (쉬운 최단거리, 자바스크립트)

문제 14940번: 쉬운 최단거리 지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000) 다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이 www.acmicpc.net 풀이 지도의 크기 n * m 이며 0은 갈 수 없는 땅, 1은 갈 수 있는 땅, 2는 목표지점을 나타낸다. 각 지점에서 목표지점까지의 거리를 출력한다. 원래 갈 수 없는 땅인 위치는 0, 원래 갈 수 있는 땅인 부분 중에서 도달할 수 없는 위치는 -1을 출력한다. 목표지점에서 시작하는 BFS를 수행하여 갈 수 있는 모든 땅을 탐색하며 해당 땅에서 목표지점까지의 거리를 구한다. queue에 좌표를 저장할 때 cnt를..

산본개발자
'백준' 태그의 글 목록 (4 Page)