code kata
<하샤드 수 판별>
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
<제한 조건>
x는 1 이상, 10000 이하인 정수입니다.
<brainstorming>
정수값의 자릿수를 더하는 건 이전에도 했었기 때문에 풀 수 있을 줄 알았지만 조금 다른 방법으로 접근을 해야 했나보다.
먼저 정수를 따로 선언하고 자릿수를 더한 값도 따로 선언하여 나누었을 때,
나누어 떨어지는 값이면 true, 아니면 false 값을 출력해야 해서 if 문을 사용해야 하나 싶었지만 true 값은 출력이 잘 되는데
false 값이 출력이 안되서 계속 고민하고 코드를 수정했지만 false 값이 출력이 되질 않았다.
아래의 코드는 직접짜본 코드이지만, 원하는 결과를 출력하진 못했다.
using System;
public class Solution {
public bool solution(int x) {
bool answer = true;
int temp = 0;
while(x>0)
{
temp += x%10;
x = x /10;
}
bool isHashad = (x%temp) == 0;
return answer;
}
}
결국 다시 구글링으로 다른 사람의 풀이를 참고한 결과..
using System;
public class Solution {
public bool solution(int x)
{
string temp = x.ToString();
int sum = 0;
for (int i = 0; i < temp.Length; i++)
{
sum += (int)Char.GetNumericValue(temp[i]);
}
bool answer = x % sum==0 ? true:false;
return answer;
}
}
한 줄씩 뜯어서 보자면,
string temp = x.ToString();
=> 정수 x를 문자열로 변환을 한다.
for( ~ sum+= (int)Char.GetNumericValue(temp[i]));
=> for 문을 사용하여 각 자리수의 합을 구한다.
bool answer = x % sum == 0 ? true:false;
=> 조건 연산자로, x가 자리수 합으로 나누어 떨어지면 참, 아니면 거짓을 출력한다.
아래의 코드는 다른사람의 다른방식의 풀이방법이다.
using System.Linq;
public class Solution {
public bool solution(int x) {
bool answer = true;
var temp = x.ToString().ToList().Select(y => int.Parse(y.ToString())).Sum();
if (x % temp != 0)
answer = false;
return answer;
}
}
※ 오늘의 키워드
- 조건 연산자
- 자리수 구하기
'TIL (since 2023.08.07 ~ )' 카테고리의 다른 글
2023-09-04 TIL (콜라츠 추측, 배열 탐색, Unity 패키지 추가) (0) | 2023.09.04 |
---|---|
2023-09-01 TIL (조건문과 반복문 & 조건연산자) (0) | 2023.09.01 |
2023-08-30 TIL (정수를 문자형으로 형변환 후 배열) (0) | 2023.08.30 |
2023-08-29 TIL (삼항 조건 연산자와 제곱근 함수) (2) | 2023.08.29 |
2023-08-28 TIL (0) | 2023.08.28 |