IT Study/백준 알고리즘
[백준 알고리즘/Kotlin] 11047번 동전 0 (feat. 노선 정했다... )
three kim
2023. 12. 20. 16:07
728x90
자바스크립트 알고리즘... 안녕... 이제는 널 보내줄게... 고마웠고... 한동안 바바이... 아디다스... ⭐️
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() 메서드는 사용한 자원을 명시적으로 해제하는 역할을 합니다.
주로 입출력 스트림이나 네트워크 연결과 같은 외부 자원을 사용한 경우, 사용이 끝난 후에 명시적으로 닫아주어야 합니다.
[Java] BufferedReader와 BufferedWriter (입출력 속도)
백준 알고리즘을 풀며 Scanner와 System.out.println() 사용할 때, 📌 시간 초과가 나는 이유는 무엇일까요? - Java 입력 속도 6위에 자리매김한 BufferedReader와 Integer.parseInt와 비교하여 Scanner를 사용할 때에
1-three.tistory.com
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() : 내림차순 정렬 (원본 변경 없이 새로운 배열 반환)