본문 바로가기
Coding Test/Java Coding Test

[프로그래머스 / 자바] - 하샤드 수

by nam_ji 2024. 1. 16.

하샤드 수

문제

  • 양의 정수 x가 매개변수로 주어집니다.
  • x가 하샤드 수라면 true를 아니라면 false를 출력하는 문제입니다.
  • 하샤드 수는 x로 예를 들면 x의 각 자릿수의 합으로 x가 나누어지는 수를 말합니다.


테스트(이클립스)

  • 각 자릿수의 합을 담을 변수 sum을 선언합니다.
  • x의 각 자릿수를 구하기 위해 while문을 사용했습니다
  • while문 안에는 sum 변수에 x를 10으로 나눈 나머지를 담아서 더하게 했습니다.
  • 그 밑에 x를 10으로 나눈 몫을 담도록 하였습니다.
  • 계산해보면
    첫번째 while문 결과는 sum = 2, x는 1을 담게 됩니다.
    두번째 while문 결과는 sum = 3, x는 0을 담기 때문에 while문이 정지하게 됩니다.
  • 그 값을 이용하여 x를 sum으로 나눠서 0이 되면 true를 아니라면 false를 출력하게 했지만 원하는 결과가 나오지 않아 왜 그럴까 하고 봤더니 x를 나눈 몫을 계속 담다 보면 나중에는 0을 담고 있게 됩니다. 그럼 마지막에 x 나누기 sum은 0과 sum을 나누게 되기 때문에 원하는 결과가 나오지 않았던 것입니다.
  • 그래서 변수 a를 만들어 여기에 x를 담고 while문에서는 a를 이용하여 sum을 구하고 마지막 연산식은 x를 이용하여 문제를 해결했습니다.
package com.namji.codingtest.level0;

public class HarshadNumber {
	public static void main(String[] args) {
		/*
		 * 양의 정수 x가 매개변수로 주어집니다.
		 * x가 하샤드 수라면 x의 자릿수 합으로 x가 나누어져야 합니다.
		 * ex) 18은 자릿수합 = 1+8 = 9 -> 18 / 9 를 
		 * 했을 때 나누어 떨어지기 때문에 18은 하샤드 수 입니다.
		 * x가 하샤드 수인지 true / false로 출력하는 문제입니다.
		 * 10 > true / 12 > true / 11 > false / 13 > false
		 */
		int x = 13;
		int a = x;
		int sum = 0;
		while (a > 0) {
			sum += a % 10;
			a /= 10;
		}
		System.out.println((x%sum)==0 ? true : false);
//		if ((a % sum) == 0) {
//			System.out.println(true);
//		} else {
//			System.out.println(false);
//		}
	}
}

 


프로그래머스 코드

class Solution {
    public boolean solution(int x) {
        int a = x;
        int sum = 0;
        while (a > 0) {
            sum += a % 10;
            a /= 10;
        }
        return (x%sum)==0 ? true : false;
    }
}