매일 백준의 알고리즘 문제를 풀며 3문제씩 풀며
한 언어를 마스터 할 것을 목표로 이 글을 작성할 예정입니다.
https://www.acmicpc.net/problem/2745
첫 번째 문제는 내가 받은 n에 b진수로 변환하는 것인데
그럼 문자일 때는 숫자로 치환해 줘야하니 조건에 n[x]가 숫자면-'0'을 해줘서 그 수 만큼 곱해지고
n[x]가 문자면-'A'에 10을 더해준 만큼을 b에 곱해주도록 만들어 출력했다.
import java.util.Scanner
fun main() = with(Scanner(System.`in`)){
val n = next()
val b = nextInt()
var result = 0
for (x in n.indices){
if (n[x] in '0'..'9'){
result = result * b + (n[x] - '0')
} else {
result = result * b + (n[x] - 'A' + 10)
}
}
print(result)
}
https://www.acmicpc.net/problem/11005
이번에는 반대로 해주는 것인데 그럼 계산도 n이 일단 0보다 작아지는 만큼 반복을 돌고
b를 나눠줘야 하는데 그것이 10보다 작으면 0~9 사이기에+ '0'.code를 만들어 그것을 char로 만들어주었다.
그리고 그게 문자라면 -10을 해준것에 'A'를 더해주어 문자를 만들어 준다.
그 다음 result에는 반대의 순서대로 문자가 들어왔기에.reverse()를 통해 반대로 출력해준다.
import java.util.Scanner
fun main() = with(Scanner(System.`in`)) {
var n = nextInt()
val b = nextInt()
val result = StringBuilder()
while (n > 0) {
if (n % b < 10) {
result.append((n % b + '0'.code).toChar())
} else {
result.append((n % b - 10 + 'A'.code).toChar())
}
n /= b
}
print(result.reversed())
}
https://www.acmicpc.net/problem/2720
이 문제는 코인을 바꿔주는 문제로 간단하게 몇 번을 할 것인지 반복을 받고
intArray에 있는 코인을 n에 나누어주어 cnt 안에 넣어주면 된다.
fun main() {
val sb = StringBuilder()
val coin = intArrayOf(25, 10, 5, 1)
repeat(readln().toInt()){
var n = readln().toInt()
val cnt = arrayOf(0, 0, 0, 0)
for (i in coin.indices){
cnt[i] = n / coin[i]
n %= coin[i]
}
sb.append("${cnt[0]} ${cnt[1]} ${cnt[2]} ${cnt[3]}\n")
}
print(sb)
}
코드의 활용을 하는 방법을 알아가는 것 같다.
최적화가 잘 되있는 코드를 만들도록 노력해야겠다.