분류 전체보기
-
[백준 알고리즘/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] 배열의 내용을 비교하는 contentEqualsIT Study 2024. 1. 3. 14:05
Kotlin에서 배열을 비교할 때는 주의해야 합니다. 배열이 참조 타입이기 때문에 '==' 연산자를 사용하면 배열의 참조가 비교되기 때문인데요. 이는 다음과 같은 예제 코드에서 확인할 수 있습니다. val arr1 = intArrayOf(1, 2, 3) val arr2 = intArrayOf(1, 2, 3) println(arr1 == arr2) // 출력: false arr1과 arr2는 같은 내용을 가지고 있지만, '==' 연산자를 사용하면 false가 출력됩니다. 이는 '==' 연산자가 두 배열의 참조를 비교하기 때문입니다. 그렇다면, 배열의 내용 자체를 비교하려면 어떻게 해야 할까요? 이때 사용할 수 있는 것이 바로 contentEquals() 함수입니다. 이 함수는 배열의 내용이 같은지를 비교합..
-
[백준 알고리즘/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] 코틀린의 Map: mapOf, mutableMapOf, Map의 차이IT Study/컴퓨터 기초 2023. 12. 27. 16:52
코틀린 역시 컬렉션 라이브러리를 제공하며, 그 중 맵(map)은 키-값 쌍을 저장하는 데 사용됩니다. 맵은 Map, mapOf, mutableMapOf 등 다양한 방식으로 표현될 수 있습니다. 이들 각각의 차이점과 사용 시기에 대해 알아봅시다. 1. Map Map은 코틀린에서 제공하는 인터페이스입니다. Map 타입의 변수는 변경 불가능한 맵(read-only map) 또는 변경 가능한 맵(mutable map)을 참조할 수 있습니다. 이를 통해 프로그램의 유연성을 높여줍니다. val map1: Map = mapOf("one" to 1, "two" to 2) val map2: Map = mutableMapOf("one" to 1, "two" to 2) 2. mapOf mapOf는 변경이 불가능한 맵(rea..
-
[백준 알고리즘/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] 알고리즘 풀이하며 배운 개념 정리하기 (feat. addAll, mutableSetOf -Set)IT Study/컴퓨터 기초 2023. 12. 26. 19:23
1. addAll addAll 함수는 특정 컬렉션에 다른 컬렉션의 모든 요소를 추가하는 데 사용됩니다. 1-1. List에서 Set 추가 fun main() { // 1. 가변 Set 생성 val set1 = mutableSetOf(1, 2, 3) // 2. 리스트에서 추가할 요소를 가지고 있는 컬렉션 val listToAdd = listOf(3, 4, 5) // 3. set1에 listToAdd의 모든 요소를 추가 set1.addAll(listToAdd) // 4. 결과 출력 println("Set1: $set1") } // 출력 // Set1: [1, 2, 3, 4, 5] 1-2. Set에서 List 추가 fun main() { // 1. 가변 List 생성 val list1 = mutableList..