[백준] 1783번: 병든 나이트 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1783번: 병든 나이트 첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 병든 나이트는 오른쪽 위나 아래로만 움직일 수 있으며 4칸 이상 방문한 경우에는 모든 방향으로 최소 한 번은 움직여야 하기 때문에 체스판의 크기에 따라 움직임이 제한된다. - N = 1 아무 방향으로 움직일 수 없기 때문에 답은 1이다. - N = 2 2번과 3번 방향으로만 움직일 수 있기 때문에 답은 (M+1)/2이다. 그러나 최대 4칸까지만 이동이 가능하다. - N >= 3 1) M < 7: 1번과 4번 방향을 번갈아가면서 이동하는 것이 최대로 방문하는 방법이다. 따라서 답은 M이다. 그러나 최대 4칸까지만 이동..
[백준] 1080번: 행렬 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 풀이 행렬 A와 B를 반복문을 통해 비교한다. 만약 값이 다르다면 A 행렬을 해당 위치를 기준으로 3 x 3 부분 행렬을 뒤집고 횟수를 세어준다. 모든 연산을 마친 후 두 행렬이 다르다면 -1을 출력하고 같다면 뒤집은 횟수를 출력한다. 코드 fun main() { val br = System.`in`.bufferedReader() val bw = System.out.bufferedWriter() val (rows, cols) = br.readLine().split(' '..
[백준] 1780번: 종이의 개수 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 풀이 입력받은 종이를 분할정복을 통해 처리하여 각 숫자(1, 0, -1)의 개수를 세는 문제이다. 입력받은 종이를 3X3 크기로 나누어 분할정복을 수행한다. 만약 현재 영역의 숫자가 모두 같다면 해당 숫자의 개수를 세고, 그렇지 않다면 3X3 영역을 다시 9개의 부분 영역으로 나누어 재귀적으로 처리한다. 이를 통해 종이 전체를 처리하면서 1, 0, -1의 개수를 각각 세어 결과를 출력한다. 코드 fun main() { val br = System..
[백준] 9205번: 맥주 마시면서 걸어가기 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 9205번: 맥주 마시면서 걸어가기 송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다. www.acmicpc.net 풀이 문제에서 주어진 집, 편의점, 페스티벌의 좌표를 그래프의 형태로 가공하여 BFS를 활용해 문제를 해결할 수 있다. 상근이는 매 50미터마다 맥주 한 병을 마셔야 하며, 최대 20병의 맥주를 들고 다닐 수 있다. 따라서 시작 위치에서 20 X 50 = 1000미터 이내라면 이동할 수 있는 지점이다. 이를 고려하여 집, 편의점, 페스티벌 장소를 각각의 정점으로 하고 정점 간의 거리가 1000미터 이내에 있으면 도착 가능한 거리라고 간주하여 그래프로 ..
[백준] 1992번: 쿼드트리 - Kotlin[코틀린]
·
알고리즘/Baekjoon
문제 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 풀이 분할정복을 활용해 풀이하면된다. 데이터를 네 부분으로 나누어 재귀적으로 탐색하는데, 탐색할 때마다 괄호를 열고 닫아주면 된다. 같은 데이터로 이루어진 부분을 찾으면 해당 숫자를 출력해준다. 코드 fun main() { val br = System.`in`.bufferedReader() val bw = System.out.bufferedWriter() val size = br.readLine().toInt() val arr = Array(s..