-
[백준 알고리즘/Kotlin] 11047번 동전 0 (feat. 노선 정했다... )IT Study/백준 알고리즘 2023. 12. 20. 16:07728x90
자바스크립트 알고리즘... 안녕... 이제는 널 보내줄게... 고마웠고... 한동안 바바이... 아디다스... ⭐️
1. val, var 차이
val: 상수, 초기화 후 값 변경 불가 (그러나 변수의 참조가 가리키는 객체의 내부 값 변경 가능)
var: 변수, 초기화 후 값 변경 가능 (그러나 다른 타입의 값을 넣을수는 없다.)
2. 입력 받기
입력을 받는 기본 문장입니다. 앞으로 Kotlin으로 문제를 풀이하기 위해 위의 코드를 기억하거나 복사해서 사용하도록 하겠습니다.
import java.io.BufferedReader import java.io.InputStreamReader fun main() { val br = BufferedReader(InputStreamReader(System.`in`)) br.close() }
1. BufferedReader
BufferedReader는 Java의 BufferedReader를 Kotlin에서 활용할 수 있도록 한 클래스로,
입력 스트림을 버퍼링하여 입출력을 효율적으로 처리합니다. (아래의 제 이전 블로그 글을 참조하시면 좋을 듯 합니다)
2. InputStreamReader
InputStreamReader는 바이트 스트림에서 문자 스트림으로 변환하는 역할을 합니다.
System.in으로부터 바이트 스트림을 읽어 문자 스트림으로 변환하여 BufferedReader에 전달합니다.
3. System.in
System.in은 표준 입력 스트림으로, 사용자로부터 데이터를 입력받을 수 있는 스트림입니다.
4. close() 메서드
close() 메서드는 사용한 자원을 명시적으로 해제하는 역할을 합니다.
주로 입출력 스트림이나 네트워크 연결과 같은 외부 자원을 사용한 경우, 사용이 끝난 후에 명시적으로 닫아주어야 합니다.3. print, println 차이
Kotlin 역시 print와 println을 사용하고 있습니다. (알고 있던 개념대로 ln은 줄바꿈 포함)
4. 결과 코드
결과 코드를 보며, 조금 더 자세히 살펴보도록 하겠습니다.
import java.io.BufferedReader import java.io.InputStreamReader fun main() { val br = BufferedReader(InputStreamReader(System.`in`)) val (n, k) = br.readLine().split(" ").map { it.toInt() } val coins = List(n) { br.readLine().toInt() } // 큰 수 순서대로 정렬 val sortedCoins = coins.sortedDescending() // 결과 : 동전 개수 var coinCnt = 0 var remain = k for (coin in sortedCoins) { coinCnt += remain / coin remain %= coin } println(coinCnt) br.close() }
🌟 4-1. List(n)을 사용하는 이유는?
val coins = List(n) { br.readLine().toInt() }
List는 Kotlin의 표준 라이브러리에 속하는 불변 리스트이기 때문입니다.
List는 크기가 변경되지 않는 읽기 전용 데이터를 다룰 때 사용합니다.
coins는 단순한 읽기 전용 데이터라고 판단했기에 List에 할당하였습니다.
⭐️ 4-2. List 정렬하는 방법
// 1. sorted() : 오름차순 정렬 (원본 변경 없이 새로운 리스트 반환) val unsortedList = listOf(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5) val sortedList = unsortedList.sorted() println(sortedList) // 2. sortedBy() : 조건에 따라 정렬 (원본 변경 없이 새로운 리스트 반환) // ⚠️ 주의 : (ed 없는) sortBy는 원본 변경 val unsortedList = listOf("apple", "banana", "orange", "grape") val sortedList = unsortedList.sortedBy { it.length } println(sortedList) // 3. sortedDescending() : 내림차순 정렬 (원본 변경 없이 새로운 리스트 반환) val unsortedList = listOf(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5) val descendingList = unsortedList.sortedDescending() println(descendingList)
(추가) Array 정렬
1. sorted() : 오름차순 정렬 (원본이 수정되며 반환 값 X)
2. sortedArray() : 오름차순 정렬 (원본 변경 없이 새로운 배열 반환)
3. sortedArrayDescending() : 내림차순 정렬 (원본 변경 없이 새로운 배열 반환)'IT Study > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘/Kotlin] 1931번 회의실 배정 (feat. 입력 받기 이젠 정복한 듯...?) (0) 2023.12.21 [백준 알고리즘/Kotlin] 2839번 설탕 배달 (0) 2023.12.21 [백준 알고리즘/JavaScript] 1000번 A + B (Feat. 입력받기) (0) 2023.12.14 [백준 알고리즘] 첫 사용법 (초기 컴파일 오류, 언어 설정하기) (0) 2023.03.20 [백준 알고리즘/Java] 10811번 바구니 뒤집기 (0) 2023.03.14