본문 바로가기

하샤드 수

programmers code review/_step1 2021. 8. 9.
728x90

프로그래머스 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
 

코딩테스트 연습 - 하샤드 수

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하

programmers.co.kr

'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

댓글