프로그래머스 1단계 Java 하샤드 수 문제입니다.
문제 설명
양의 정수 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은 하샤드 수가 아닙니다.
문제 해결 방법
① 입력받은 정수를 한 자리수씩 분할하기 위해 문자형 배열로 변환
② 문자형 배열을 정수로 다시 변환하여 덧셈 계산
③ 입력된 정수를 덧셈계산한 값으로 나누었을 때, 결과 판단
class Solution {
public boolean solution(int x) {
int temp = 0;
String str = Integer.toString(x);
// ① 입력받은 정수를 한 자리수씩 분할하기 위해 문자형 배열로 변환
for(char c : str.toCharArray()) {
// ② 문자형 배열을 정수로 다시 변환하여 덧셈 계산
temp += Integer.parseInt(Character.toString(c));
}
// ③ 입력된 정수를 덧셈계산한 값으로 나누었을 때, 결과 판단
return x % temp == 0 ? true : false;
}
}
※ 삼항연산자
③ 의 반환값은 삼항연산자로 값을 정하게 되는데, if/else 문과 매우 흡사하여 코드가 간결해지는데에 도움이 됩니다.
삼항연산자 사용법은 다음과 같으며, 참 또는 거짓의 값을 반드시 반환하는 것이 if/else 문과의 차이점입니다.
Condition ? TRUE : FALSE
if/else 문에 비해 구문이 간단하다해서 속도가 빠른 것은 아닙니다.
※ 위 코드는 해결 방법 중 한가지이며 더 효율적인 코드가 있을 수 있습니다.
문제 풀어보기 ▶ https://programmers.co.kr/learn/courses/30/lessons/12947?language=java
'programmers code review > _step1' 카테고리의 다른 글
콜라츠 추측 (0) | 2021.08.10 |
---|---|
평균 구하기 (0) | 2021.08.10 |
핸드폰 번호 가리기 (0) | 2021.08.09 |
행렬의 덧셈 (0) | 2021.08.08 |
x만큼 간격이 있는 n개의 숫자 (0) | 2021.08.08 |
댓글