하샤드 수
: 각 자릿수의 합으로 나누어지는 양의 정수
처음 코드
class Solution {
fun solution(x: Int): Boolean {
var answer = true
var x: Int = x
var xs: Int = 0
while(x > 0){
xs += (x %10)
x /= 10
println(xs)
println(x)
}
if (x % xs == 0) {
answer = true
} else {
answer = false
}
return answer
}
}
테스트 3, 4 에서 결괏값이 다르게 나온다.
출력한 값은 맞게 나오는데 왜 false 로 나와야할게 true 로 나오는 걸까
IF 구문 넣기 전에 x 값이 10으로 몽땅 나눠서 0인 상태로 IF 구문에 들어가기 때문에 결괏값이 죄다 true 로나오고 3,4 만 실패
x 값을 받아오는 변수를 다른 이름으로 선언하니 제대로 나온다
class Solution {
fun solution(x: Int): Boolean {
var answer = true
var a: Int = x
var xs: Int = 0
while(a > 0){
xs += (a %10)
a /= 10
}
if (x % xs == 0) answer = true else answer = false
return answer
}
}
다른 사람 풀이
class Solution {
fun solution(x: Int): Boolean {
return x % x.toString().fold(0){acc, c -> acc + c.toInt() - 48} == 0
}
}
inline fun <T, R> Iterable<T>.fold(
initial: R,
operation: (acc: R, T) -> R
): R
▼누적값
x % ( x.toString().fold(0){acc, c -> acc + c.toInt() - 48} ) == 0
^초기값 ^순회중인 문자
fold 메소드는 배열, 리스트, 문자열 등과 같이 순회 가능한 자료형에 대하여 각 요소를 순회하면서 누적 연산을 수행한다
숫자 문자열을 정수로 변환할 때 숫자 문자열의 각 문자가 가지고 있는 아스키 코드를 통해서 정수값을 가져온다.
아스키 코드는 문자를 숫자로 표현하는 표준 인코딩 체계 중 하나로
0부터 9까지의 값이 48부터 57이므로 각 값에서 48을 빼면 해당 문자를 나타내는 숫자를 얻을 수 있다.
'코딩테스트' 카테고리의 다른 글
프로그래머스 | 콜라츠 추측 (1) | 2023.12.22 |
---|---|
프로그래머스 | 두 정수 사이의 합 (0) | 2023.12.21 |
프로그래머스 정수 내림차순으로 배치하기 (0) | 2023.12.19 |
프로그래머스 정수 제곱근 판별 (0) | 2023.12.18 |
프로그래머스 자연수 뒤집어 배열로 만들기 (1) | 2023.12.15 |