IT Study/백준 알고리즘
-
[백준 알고리즘/Kotlin] 2751번 수 정렬하기2 (feat. 코드 비교하기)IT Study/백준 알고리즘 2024. 1. 6. 15:44
문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 예제 입력 1 5 5 4 3 2 1 예제 출력 1 1 2 3 4 5 제출한 2개의 코드를 확인해보며, 두 코드를 비교하도록 하겠습니다. 최초 제출 코드 (1번) import java.lang.StringBuilder import java.util.PriorityQueue fun main() = System.`in`.bufferedReade..
-
[백준 알고리즘/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] 1181번 단어 정렬 (feat. Set에서 List로 변경?)IT Study/백준 알고리즘 2024. 1. 1. 17:19
1181번 문제는 문제 속에 정답이 있습니다. 1. 길이가 짧은 것부터 2. 길이가 같으면 사전 순으로 단, 중복된 단어는 하나만 남기고 제거해야 한다. 문제는 풀이해야 할 순서를 만들고, 그 순서대로 코드를 작성하면 되는데요. 아래와 같이 순서를 바꿔보도록 하죠. 1. 중복된 단어는 하나만 남기고 제거해야 한다. 2. 길이가 짧은 것부터, 길이가 같으면 사전 순으로 먼저 중복을 제거하고, 정렬해주도록 하겠습니다. 최종 코드 import java.lang.StringBuilder fun main() = System.`in`.bufferedReader().use { br -> val n = br.readLine().toInt() val result = StringBuilder() // 중복 제거 val s..
-
[백준 알고리즘/Kotlin] 2563번 색종이 (feat. 2차원 배열 2)IT Study/백준 알고리즘 2023. 12. 31. 12:42
고민하기 어떻게 풀어야할지 고민부터 해보죠. 1. 가로와 세로가 각각 100인 2차원 배열을 생성합니다. 초기에는 모든 요소를 0으로 설정합니다. 이 배열은 도화지를 나타내며, 각 요소는 해당 위치에 색종이가 있는지를 표시합니다. 2. 색종이의 수를 입력받습니다. 3. 색종이의 위치를 입력받습니다. 이 위치는 색종이의 왼쪽 상단 모서리를 나타냅니다. 4. 색종이의 크기가 10x10이므로, 해당 위치에서 가로와 세로로 10칸에 해당하는 배열의 요소를 1로 설정합니다. 5. 이제 도화지에 색종이가 있는 위치는 배열에서 1로 표시되어 있습니다. 따라서 배열의 모든 요소를 순회하면서 1인 요소의 수를 세면, 이것이 색종이가 붙은 검은 영역의 넓이가 됩니다. 최종 코드 fun main() = System.`in`..
-
[백준 알고리즘/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. 예외 처리한 형태 안전한 코딩을 연습하기 위해서는 예외 처리를 습관화하는 것이 좋겠습니다. (예외가 발생활 확률이 매우 낮을 때는 사용하지 않는 것도 좋을 것 같네요. 필요할 때를 잘 구분해서..