본문 바로가기
Today/Study

23/11/16

by shulk 2023. 11. 16.

알고리즘 문제 21번- 하샤드 수 

일단 문제는

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

class Solution {
    public boolean solution(int x) {
      boolean answer = false;

      String str_x = String.valueOf(x);
      int str_sum = 0;

      for (int i = 0; i < str_x.length(); i++) {
            str_sum += Integer.parseInt( str_x.substring(i,i+1));          
      }

      if(x % str_sum == 0){
            answer = true;
      }

      return answer;
    }
}

 

먼저 내가 푼 방법은 x를 문자형으로 변경한뒤 반복문으로 문자 길이만큼 작업하며,substring()을 이용해서 문자 한개씩 자르도록하고 Integer형으로 변환 시키고 str_sum에 다 더하도록 했다. 

그후 x를 str_sum으로 나눈 나머지를 체크해서 풀었다.

다 풀고 채점후 좋아요 많은 다른 사람 풀이 보니깐 다른 사람은 split()을 이용해서 풀었는데 코드의 채점 시간을 비교해보니 내가 푼 방법은  0.0x ms대인데 밑에 풀이 방법은 0.1x ms대였다. 

class Solution {
    public boolean solution(int x) {
      boolean answer = false;

      String[] str_x = String.valueOf(x).split("");
      int str_sum = 0;

      for (String s : str_x) {
            str_sum += Integer.valueOf(s);
      }

      if(x % str_sum == 0){
            answer = true;
      }

      return answer;
    }

 

이 문제는 자바로 먼저 해보고 그다음 파이썬으로 해봤는데

역시 파이썬으로 코딩 문제 푸는게 젤 좋은듯...

def solution(x):
    answer = False
    
    if x % sum( int(i) for i in str(x)) == 0:
        answer = True


    return answer

'Today > Study' 카테고리의 다른 글

23/11/20  (0) 2023.11.20
23/11/17  (0) 2023.11.17
23/11/15  (0) 2023.11.15
23/11/14  (0) 2023.11.14
23/11/10  (0) 2023.11.10