문제 풀기/C#

21. 하샤드 (ToCharArray()(문자열 문자로 나누기))

kagan-draca 2025. 1. 14. 15:20

 

풀이 1)

 

문제를 보고 int 형 매개변수 x를 문자 단위로 나누고 각 문자의 합을 구한 후

x % sum == 0을 수행하면 된다고 판단했다.

 

using System;
using System.Linq;

public class Solution {
    public bool solution(int x) {
        char[] temp = x.ToString().ToCharArray();
        
        int sum = 0;
        for(int i = 0; i < temp.Length; i++)
            sum += int.Parse(temp[i].ToString());
        
        return x % sum == 0;
    }
}

 

 

하지만, 위와 같이 코드를 짤 경우 형변환이 빈번하여 수행시간 측면에서

별로 안 좋은 성능을 보이는 것을 확인할 수 있었다.

 

풀이 2) int 형 매개변수 x를 %(나머지)와 /(나누기) 연산자를 이용해 x % sum 으로 나눠지는 확인한다.

이때, x /= 10을 수행할 경우 원본 x이 홰손되기 때문에 int temp = x를 만들어 temp를 %(나머지), /(나누기)를 수행해

원본 x가 홰손되지 않도록 해줍니다.

 

using System;
using System.Linq;

public class Solution {
    public bool solution(int x) {
        int temp = x;
        int sum = 0;
        do
        {
            sum += temp % 10;
            temp /= 10;
        }while(temp != 0);
        return x % sum == 0;
    }
}

 

그 결과,

 

위와 같이 풀이 1)에 비해 굉장히 적은 수행시간으로 문제를 해결할 수 있었다.