일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- process
- UIKit
- UserDefault
- 청년취업사관학교후기
- xml
- CS193p
- colorofdays
- 조건문
- flutter
- 코딩테스트
- xcode
- flutter #state # stateful #stateless
- ImageSlider
- MVVM
- collectionView
- 프로그래머스
- 백준
- 알고리즘
- WidgetTree
- 오늘의 색상
- 새싹후기
- 스위프트
- 스터디
- 프로젝트회고
- stanford
- Swift
- GIT
- Masil
- SwiftUI
- IOS
Archives
- Today
- Total
개발을 시작하는 이야기
[프로그래머스] 하샤드 수 본문
문제 설명
양의 정수 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은 하샤드 수가 아닙니다.
Solution.Swift
func solution(_ x:Int) -> Bool {
var sum = 0
for i in String(x) {
guard let number = Int(String(i)) else { break }
sum += number
}
return x % sum == 0
}
- 자릿수의 합을 담아줄 변수 sum을 만들어준다.
- for문을 사용하여 String으로 변환된 x의 값을 하나씩 분리해준다.
- 분리된 x의 값을 Int로 다시 변경해서 number에 넣어준다.
- x의 값을 sum으로 나눈 나머지 값이 0인지 확인하여 반환한다.
다른 사람의 문제풀이
func solution(_ x:Int) -> Bool {
return x % String(x).reduce(0, {$0+Int(String($1))!}) == 0
}
reduce를 활용하면 보다 깔끔하게 작성이 가능하다.
'개발 이야기 > Algorithm Study' 카테고리의 다른 글
콜라스 추측 (0) | 2022.04.24 |
---|---|
[프로그래머스] 평균 구하기 (0) | 2022.04.23 |
[프로그래머스] 핸드폰 번호 가리기 (0) | 2022.04.21 |
[프로그래머스] 행렬의 덧셈 (0) | 2022.04.20 |
[프로그래머스] x만큼 간격이 있는 n개의 숫자 (0) | 2022.04.19 |