일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- RETROFIT
- LV1
- 테마변경
- Alert Dialog
- 다크모드제한
- recyclerView 클릭이벤트
- naver open api
- 임시저장하기
- bottom-up
- 백준
- 녹음기
- silver4
- Android
- bronze4
- LIS
- bronze3
- 뷰클래스
- fragment에서 context사용
- toLong()
- dp
- RecyclerView
- silver3
- Silver5
- bronze2
- gradle설정
- stack
- Top-Down
- map
- Kotlin
- 프로그래머스
- Today
- Total
유니 코드
[PGS/프로그래머스][Lv1] 하샤드 수(Kotlin) 본문
[문제 설명]
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
[제한 조건]
- x는 1 이상, 10000 이하인 정수입니다.
[입출력 예]
arr | return |
10 | true |
12 | true |
11 | false |
13 | false |
[입출력 예 설명]
입출력 예 #1
10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.
입출력 예 #2
12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.
입출력 예 #3
11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.
입출력 예 #4
13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.
[풀이]
1) 입력받은 숫자의 각 자리수 더하기
2) 입력받은 수에서 더한 값으로 나눠서 반환값 결정
각 자리 수를 더할 때 보통 반복문을 이용해 10으로 나누면서 더하기도 하지만
아래 코드와 같이 숫자를 문자열로 바꿔준 뒤 map으로 아스키 코드 값으로 치환한 후 sum을 이용하여 값을 구할수도 있다.
풀이를 완료하고 다른사람의 풀이를 봤다. 역시 놀라웠다..
어떤 문제든 한 줄로 푸는 사람은 항상 존재했다..
- 오늘의 깨달음
1. return 값으로 표현식을 사용할 수 있다는 점
2. fold함수
: 초기값을 설정해주고 왼쪽부터 오른쪽까지 현재의 계산값에 각각을 적용하는 함수로 배열에서 사용하는 함수
[코드1]
class Solution {
fun solution(x: Int): Boolean {
var total = 0
total = x.toString().map {
it.toInt() - '0'.toInt()
}.sum()
if(x % total == 0) return true
else return false
}
}
[코드2]
class Solution {
fun solution(x: Int): Boolean {
return x % x.toString().fold(0,{sum, c -> sum + (c.toInt() - 48)}) == 0
}
}
'알고리즘 > 미분류' 카테고리의 다른 글
[PGS/프로그래머스][Lv1] x만큼 간격이 있는 n개의 숫자(Kotlin) (0) | 2022.05.12 |
---|---|
[PGS/프로그래머스][Lv1] 행렬의 덧셈(Kotlin) (0) | 2022.05.12 |
[PGS/프로그래머스][Lv1] 핸드폰 번호 가리기(Kotlin) (0) | 2022.05.10 |
[PGS/프로그래머스][Lv1] 3진법 뒤집기(Kotlin) (0) | 2022.05.09 |