- 문제
- 알고리즘
(1)과 (2)의 곱셈을 진행하는 문제이고, (3), (4), (5)는 각각 (2)의 자릿수에 따른 곱셈 과정이다.
(3)은 472*5의 과정이고, (4)는 472*5, (5)는 472*3의 과정이다.
1. 수학적으로 접근하여 각각의 자리수를 나누어 출력하고, 맨 마지막 결과는 (1)과 (2)의 곱셈을 출력하면 된다는 것이 가장 먼저 드는 단순한 방법인 것 같다.
2. (2)를 문자열로 받아서 JAVA에서의 charAt( )과 같이 한문자식 .toInt( ) 로 변환하여 (1)과 곱해서 출력하는 방법이 있는 것 같다.
- 풀이
- 1번 방법
import java.util.*
fun main(args : Array<String>) : Unit = with(Scanner(System.`in`)) {
val a = nextInt()
val b = nextInt()
val b_1 = (b%10)
val b_10 = ((b%100)/10)
val b_100 = (b/100)
println("${b_1*a}")
println("${b_10*a}")
println("${b_100*a}")
println("${a*b}")
}
대부분 흔히 사용하는 풀이 방법이었지 싶다.
Scanner를 이용하여 a와 b를 Int 형식으로 받아주고, b에서 파생된 각각의 변수에 b의 자리수를 나눠 줄 값들을 저장한다.
b%10 => 나머지로 1의자리수가 생성 => 5 출력
((b%100)/10) => 나머지의 몫으로 10의 자리수가 생성 => 8 출력
(b/100) => 몫으로 100의 자리수가 생성 => 3 출력
이렇게 계산하여 간단히 출력만 해 주었다.
- 2번 방법
이 방법은 조금 이상하고 낯설긴 하지만.. 이번에 문제를 풀면서 새롭게 알게 된 방법이다.
Char 형식의 문자를 Int형으로 변환할 때 생기는 문제에 대하여 다루었고, 풀이 방법을 알게되었다.
바로 ASCII 코드와 겹치는 경우, 변환하였을 때 우리가 기대한 Int 값이 아닌 ASCII에 해당하는 값이 출력된다는 것이다.
fun main(args : Array<String>) : Unit {
val a = readLine()!!.toInt()
val b = readLine()!!
println("${a*Character.getNumericValue(b[2])}")
println("${a*Character.getNumericValue(b[1])}")
println("${a*Character.getNumericValue(b[0])}")
println("${a*b.toInt()}")
}
a에는 (1)의 값이, b에는 (2)의 값이 들어갈 수 있도록 readLine( ) 으로 불러와 주었다.
a의 경우 바로 .toInt( ) 로 변환하였고, ASCII코드에 해당하는 값이 없었다.
b의 경우에는 한 문자씩 .toInt( ) 로 읽어와야 했었기 때문에 각각의 값이 기대한 값과 다르게 ASCII 문자에 해당하는 값이 출력되어버렸다.
그에 대한 해결 방법으로 간단하게 위와 같이 Character.getNumericValue( ) 함수를 사용하였다.
- 제출 결과 및 정리
지금 시점이 아직 백준 알고리즘을 시작한지 얼마 되지 않은 코린이라서 참.. 한 문제 푸는데도 컴파일 에러, 오답이 많이 나오는 것 같은데.. 에러 없이도 완벽한 클린코드를 작성할 수 있는 날이 되고싶다 ㅠㅠ
'코딩 (독학) > ★ Algorithm' 카테고리의 다른 글
[백준] 2741번 : N찍기 - Kotlin [코틀린] (0) | 2022.04.19 |
---|---|
[백준] 15552번 : 빠른 A+B - Kotlin [코틀린] (0) | 2022.04.15 |
[백준] 2480번 : 주사위 세개 - Kotlin [코틀린] (0) | 2022.04.15 |
[백준] 2884번 : 알람 시계 - Kotlin [코틀린] (0) | 2022.04.11 |
[Kotlin Algorithm] 코틀린 알고리즘 문제풀이 TIP ! (0) | 2022.04.06 |