본문 바로가기

Algorithm159

#2292 벌집 문제 코드fun main() { var n = readln().toInt() var cnt = 1 while (n > 1) { n -= 6 * cnt cnt++ } println(cnt)} 풀이규칙이 1, 6, 12, 18, 24, ... 이런 식이다.즉, 한 개의 방을 지나는 방 수는 1개,두 개의 방 수를 지나는 방 수는 6개,세 개의 방 수를 지나는 방 수는 12개.. 이런 식 지나가야하는 방의 개수가 같은 칸은 총 6의 배수 개라는 점이다그래서 입력받은 숫자 칸으로 가려면 지나가야하는 방의 개수를 구하려면 0보다 작아질 때 까지 6의 배수를 계속해서 빼면 된다여기서 1은 예외적으로 먼저 빼준다36의 숫자를 예로 들면36 - 1 - 6 - 12 -.. 2024. 7. 22.
#5073 삼각형과 세 변 문제 코드fun main() { while (true) { val (a, b, c) = readln().split(' ').map { it.toInt() }.sorted() if (c == 0) break println( when { c >= a + b -> "Invalid" a == b && b == c -> "Equilateral" a == b || b == c -> "Isosceles" else -> "Scalene" } ) }} 풀이문제 자체는 간단해 보였다.가장 긴 변을 알아야 하기 때문에 .. 2024. 7. 22.
#23971 ZOAC 4 문제   코드fun main() { val (h, w, n, m) = readln().split(' ').map { it.toLong() } val height = (h + n) / (n + 1) val width = (w + m) / (m + 1) println(width * height)} 풀이표를 그려서 자리를 채워보다가 대략적인 방향을 잡았다.문제에서는 가로 m칸 또는 세로 n칸 이라고 적혀있어서 이것이 문제의 요점인가 싶었다.근데 결국 가로 m칸 그리고 세로 n칸 으로 계산하는 것이 최대 수용 인원 수를 구하는 방법이다.   이런 식으로 대각선에 인원을 배치할 수 없기 때문이다  만약 h, w, n, m = 3, 3, 1, 1 라고 가정했을 때, (2, 3)에 인원을 배치시.. 2024. 7. 22.
#1655 가운데를 말해요 문제 코드import java.io.BufferedReaderimport java.io.InputStreamReaderimport java.util.PriorityQueuefun main() { val br = BufferedReader(InputStreamReader(System.`in`)) val sb = StringBuilder() val n = br.readLine().toInt() val minHeap = PriorityQueue() val maxHeap = PriorityQueue(reverseOrder()) for (i in 0.. 1) { minHeap.offer(maxHeap.poll()) } else if (minHeap... 2024. 7. 20.
#12865 평범한 배낭 코딩테스트를 위해 알고리즘을 다시 공부하려고 한다!기존에 c++로 진행했던걸 kotlin으로 변경해서 다시 풀어보려고 한다 문제 코드import kotlin.math.maxfun main() { val (n, k) = readln().split(' ').map { it.toInt() } val w = IntArray(n + 1) val v = IntArray(n + 1) val dp = Array(n + 1) { IntArray(k + 1) } for (i in 1..n) { val (weight, value) = readln().split(" ").map { it.toInt() } w[i] = weight; v[i] = value } for.. 2024. 7. 19.
# Driving License # 문제 # 입력 및 출력 # 풀이 어처피 회전 횟수를 제외하면 세로 M-1, 가로 N-1칸씩 이동하는 것은 정해져 있다. 따라서 L * {(M-1) + (N-1)}은 고정이고 여기에 회전 횟수만 최소로 해서 더해주면 결과 값을 구할 수 있다. 문제는 연료이다. 주어진 연료 G 이하로 사용하면서 회전 횟수를 최소로 만들어야 한다. 처음엔 pair을 사용해서 하려다가 너무 복잡해지기도 하고 접근이 힘들어져서 4차원 배열을 선택했다. dp[x][y][k][l] => (x, y) 좌표에서 회전수가 k번이고, 방향은 l일 때의 최소 연료 합 일단 (x,y) 좌표에서 회전수는 max(x, y) * 2를 절대 넘지 않는다. 예) (2,2) 에서는 최대 3번, (2,4) 에서는 최대 4번, (3,3) 에서는 최대 5.. 2022. 11. 14.