목록분류 전체보기 (78)
몰?.루();
fun main() { val n = readln().toInt() val inputs = readln().split(" ").map { it.toLong() } val arr = ArrayList() for (i in 1 .. n) arr.add(i) if (inputs[0] == 1L) { val answer = IntArray(n) solve1(arr, inputs[1], 0, answer) answer.forEach { print("$it ") } } else { val target = inputs.subList(1, inputs.size).map { it.toInt() }.toIntArray() println(solve2(arr, target, 0, 1)) } } fun solve1(arr: A..
가장 기본적인 dfs인데 항상 헷갈리기도 한다 var n: Int = 0 fun main() { n = readln().toInt() val visited = BooleanArray(n + 1) dfs(0, "", visited) } fun dfs(depth: Int, s: String, visited: BooleanArray) { if (depth == n) { println(s) return } for (i in 1 .. n) { if (!visited[i]) { visited[i] = true dfs(depth + 1, "$s$i ", visited) visited[i] = false } } }
dfs를 이용해 브루트포스 방식으로 풀었다. 즉, 카메라를 회전 시킬 수 있는 모든 경우의 수를 다 테스트하며 각 경우에서 가장 사각지대가 적은 경우를 찾아내었다. import kotlin.math.min var answer = Int.MAX_VALUE fun main() { val (n, m) = readln().split(" ").map { it.toInt() } val map = ArrayList() val cameras = ArrayList() repeat(n) { r -> val arr = readln().split(" ").map { it.toInt() }.toIntArray() arr.forEachIndexed { c, i -> if (i in 1 .. 5) { cameras.add(Came..
제가 짠 코드이긴하지만 기어의 날개(?) 부분을 String으로 저장해둬서 시계 방향, 반시계 방향 회전을 String을 한칸씩 오른쪽이나 왼쪽으로 미는 방법으로 rotate() 함수를 구현한 게 참 신의 한 수 였던 것 같습니다. ^-^a; 그리고 3번 톱니를 돌리면 3번만 rotate 하는 게 아니라 2번과 4번 톱니도 검사해서 반대 방향으로 rotate() 할지 말지를 정해야하는데 이걸 dfs 방식으로 구현한 것도 괜찮은 아이디어인 거 같습니다. 덕분에 굉장히 직관적이면서도 길지 않은 코드가 되었네요. fun main() { val gearCount = 4 val gears = ArrayList(gearCount) repeat(gearCount) { gears.add(Gear(readln())) }..
문제에서 주사위 위치를 (x, y)로 나타낸다고 했는데 사실 x와 y가 반대이다... 즉 x가 row이고 y가 column이다;; fun main() { val (n, m, y, x, k) = readln().split(" ").map { it.toInt() } val map = Array(n) { IntArray(m) } repeat(n) { map[it] = readln().split(" ").map { it.toInt() }.toIntArray() } val cmd = readln().split(" ").map { it.toInt() } val dice = Dice() var r = y var c = x val dr = intArrayOf(0, 0, 0, -1, 1) val dc = intArray..
코틀린에 Pair랑 Triple이 있어서 매우 편리하게 쓰는데 문제는 Quadruple, Quintuple 등등이 없다. 대신 data class로 매우 쉽게 만들어서 쓸 수 있다. data class Quadruple(val first: A, val second: B, val third: C, val fourth: D) 이러면 이제 Quadruple을 쓸 수 있다. 사용 예시 val a: Quadruple = Quadruple(1, 2, 3, "hi") println(a.fourth) // "hi" 참고로 a.fourth = "aaa" 이런 식으로 변경 가능하게(Mutable) 만드려면 데이터 클래스 선언할 때 out을 떼야하고 val fourth 이런 애들도 전부 var fourth 이렇게 var로 ..
import kotlin.math.pow fun main() { val (n, r, c) = readln().split(" ").map { it.toInt() } println(find(2.0.pow(n).toInt(), r, c)) } fun find(l: Int, r: Int, c: Int): Int { // l은 한 변의 길이 if (r == 0 && c == 0) { return 0 } else if (r == 0 && c == 1) { return 1 } else if (r == 1 && c == 0) { return 2 } else if (r == 1 && c == 1) { return 3 } if (r < l / 2 && c < l / 2) { // 왼쪽 위 사분면 return find(l ..
import java.util.PriorityQueue fun main() { val n = readln().toInt() val arr = PriorityQueue() repeat(n) { arr.add(readln().toLong()) } var answer = 0L while (arr.size > 1) { val a = arr.poll() val b = arr.poll() val s = a + b arr.add(s) answer += s } println(answer) } 무조건 오름차순으로 정렬된 배열이 필요할 땐 PriorityQueue를 쓰는 게 좋다는 걸 배울 수 있었던 문제입니다. 이걸 몰라서 괜히 LinkedList 쓰고 binarySearch 쓰고 별 쑈를 다 했네...
Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.5.1. 프로젝트 만들자마자 실행했는데 이런 에러가 뜨길래 찾아보니 코틀린 버전 문제라서 코틀린 버전을 최신 버전으로 올려주니 해결되었습니다. 사진과 같이 Project 수준의 Gradle을 열고 kotlin 버전을 최신버전으로 바꾸고(저는 1.7.10인데 시간 지나면 달라질 수 있으니 https://kotlinlang.org/docs/releases.html 여기서 각자 확인해주세요) 마지막으로 우상단에 있는 Sync Now 해주고 나니 해결되었습니다.
브루트포스 + dfs + bfs를 모두 사용하는 문제입니다. dfs를 통해서 빈 공간에 벽을 3개 세우는 모든 경우의 수대로 벽을 세워보고, 벽을 3개 세웠을 때마다 bfs를 통해서 바이러스를 퍼트려보고, 다 퍼트린 후 남은 안전 구역이 몇 개 인지 세는 방식입니다. 쉽게 말해 노가다죠. 뭔가 엄청난 방식이 있을 줄 알았는데 다른 분들 풀이를 봐도 다 이렇게 하더라구요. import java.util.LinkedList import kotlin.math.max var answer = 0 fun main() { val (n, m) = readLine()!!.split(" ").map { it.toInt() } val map = Array(n) { readLine()!!.split(" ").map { it...