백준
-
[백준 알고리즘/Kotlin] 1847번 스택 수열 (feat. Stack, 스택 관련 메서드)IT Study/백준 알고리즘 2024. 1. 4. 14:36
저는 처음에 이 문제를 접했을 때에는 풀이 방법을 생각하지 못했습니다. 그러나 아래와 같이 로직을 정리하고, 코드를 작성해보도록 하겠습니다. 1. 만들어야 하는 수열을 순서대로 읽으면서 해당 숫자가 스택의 top에 있지 않다면, 그 숫자가 나올 때까지 스택에 숫자를 push합니다. 이 때, push하는 숫자는 1부터 n까지 순서대로 push하고, 각 push 연산마다 + 를 출력합니다. 2. 만약 스택의 top에 있는 숫자가 현재 수열에서 읽은 숫자와 같다면, 스택에서 그 숫자를 pop하고 - 를 출력합니다. 3. 만약 스택의 top에 있는 숫자가 현재 수열에서 읽은 숫자보다 크다면, 주어진 수열을 만들 수 없는 경우이므로 NO를 출력하고 프로그램을 종료합니다. 스택의 top에 있는 수가 현재 수열에서 ..
-
[백준 알고리즘/Kotlin] 2738번 행렬 덧셈 (feat. 2차원 배열)IT Study/백준 알고리즘 2023. 12. 31. 12:03
안녕하세요, 오늘은 2차원 배열을 다루는 방법에 대해 알아보도록 하겠습니다. 먼저, 최종 코드를 살펴봅시다. 최종 코드 fun main() = System.`in`.bufferedReader().use { br -> val (n, m) = br.readLine().split(" ").map { it.toInt() } val array = Array(n) { IntArray(m) } for (i in 0 until n) { array[i] = br.readLine().split(" ").map { it.toInt() }.toIntArray() } for (i in 0 until n) { val row = br.readLine().split(" ").map { it.toInt() } for (j in 0 u..
-
[백준 알고리즘/Kotlin] 1157번 단어 공부 (feat. maxOrNull, count, indexOf)IT Study/백준 알고리즘 2023. 12. 27. 14:15
이번 글에서는 Kotlin을 이용해 문자열에서 가장 빈도수가 높은 알파벳을 찾는 방법에 대해 알아보겠습니다. 이 문제는 대소문자를 구분하지 않고, 가장 빈도수가 높은 알파벳이 여러 개인 경우 '?'를 출력하는 것이 특징입니다. 최종 코드와 함께 사용된 주요 메서드를 보도록 하겠습니다. 최종 코드 fun main() = System.`in`.bufferedReader().use { br -> val word = br.readLine().uppercase() val counts = IntArray(26) for (char in word) { counts[char - 'A']++ } val max = counts.maxOrNull() val maxCount = counts.count { it == max } ..
-
[백준 알고리즘/Kotlin] 2588번 곱셈 (feat. toString() 이후 toInt() 사용)IT Study/백준 알고리즘 2023. 12. 26. 16:03
1. 최종 코드 fun main() = System.`in`.bufferedReader().use { br -> val n = br.readLine().toInt() var m = br.readLine() for (i in 2 downTo 0) { val result = n * m[i].toString().toInt() println(result) } print(n * m.toInt()) } 코드를 분석해 보도록 하죠. 아주 단순하지만, 유심히 봐야 할 곳이 있습니다. 2. 코드 살펴보기 for (i in 2 downTo 0) { val result = n * m[i].toString().toInt() println(result) } 2-1. downTo downTo는 Kotlin에서 제공하는 범위 연산..
-
[백준 알고리즘/Kotlin] 10869번 사칙연산 (feat. 입출력, append 체이닝)IT Study/백준 알고리즘 2023. 12. 26. 15:32
Kotlin 기초부터 탄탄히 가보죠. 1. 백준 알고리즘 풀이 시, 입출력의 기본 형태 1-1. 기본 형태 (simple) import java.io.BufferedReader import java.io.InputStreamReader import java.io.IOException fun main() { val br = BufferedReader(InputStreamReader(System.`in`)) val result = StringBuilder() println(result) br.close() } 1-2. 예외 처리한 형태 안전한 코딩을 연습하기 위해서는 예외 처리를 습관화하는 것이 좋겠습니다. (예외가 발생활 확률이 매우 낮을 때는 사용하지 않는 것도 좋을 것 같네요. 필요할 때를 잘 구분해서..
-
[백준 알고리즘/Kotlin] 4673번 셀프 넘버 (feat. Array의 fill과 초기화 람다 차이)IT Study/백준 알고리즘 2023. 12. 25. 17:02
다른 돌파구가 있을까 생각했지만, 이 문제는 브루트포스. 완전 탐색으로 접근합니다. 1. 최종 코드 // 완전 탐색 // (1) 1 ~ 9999, 모든 수 d(n) 계산 // (2) isSelfNumber, d(n)인 수는 false 표기 fun main() { var isSelfNumber = BooleanArray(10000) { true } for (i in 1 until 10000) { var num = i var sum = i while (num > 0) { sum += num % 10 num /= 10 } if (sum < 10000) { isSelfNumber[sum] = false } } for (i in 1 until 10000) { if (isSelfNumber[i] == true) {..
-
[백준 알고리즘/Kotlin] 1202번 보석 도둑 (feat. mutableListOf, PriorityQueue)IT Study/백준 알고리즘 2023. 12. 25. 15:47
문제는 생각보다 심플한 듯하였습니다. 그래서 아래와 같은 로직을 세우고, 이대로 코드를 작성해야겠다고 생각했습니다. 1. 용량이 작은 가방부터 꺼낸다. (꺼냄과 동시에 자료형에서 제거해야 한다.) 2. 꺼낸 가방의 용량보다 작거나 같은 보석 중 가장 가격이 높은 보석을 꺼낸다. (꺼냄과 동시에 자료형에서 제거해야 한다.) 3. 해당하는 보석의 가격을 확인하여 result에 + 한다. 4. 더이상더 이상 꺼낼 가방이 없을 때 종료 (혹은 더 이상 꺼낼 주얼리가 없을 때 종료) 1. 시간 초과된 코드 import java.io.BufferedReader import java.io.InputStreamReader import java.util.PriorityQueue fun main() { val br = B..
-
[백준 알고리즘/Kotlin] 1715번 카드 정렬하기 (feat. 우선순위 큐, PriorityQueue 클래스와 메서드)IT Study/백준 알고리즘 2023. 12. 22. 14:55
1. 로직 작성하기 1-1. 로직 오해하기 저는 주어진 카드 묶음의 수를 오름차순으로 정렬하고, 앞에 오는 두 수부터 차근차근 더해가면 될 것이라고 생각했습니다. 5 4 4 5 9 10 위와 같은 입력이 주어졌을 경우 1. 배열에 담아 [4, 4, 5, 9, 10] 2. 배열을 오름차순 정렬하고 [4, 4, 5, 9, 10] 3. 앞에 있는 두 수부터 더한다고 생각했습니다. (4 + 4) + (8 + 5) + (13 + 9) + (22 + 10) = 75 1-2. 로직 다시 체크하기 그러나 이 문제는 항상 가장 작은 두 수를 찾아, 더해야 하는 문제입니다. 5 4 4 5 9 10 위와 같은 입력이 주어졌을 경우 1. 배열에 담아 cards = [4, 4, 5, 9, 10] 2. 가장 작은 두 수를 찾아 ..