일단 내가 푼 방법은 아래와 같다.
public boolean solution(int x) {
boolean answer = false;
//x를 각 자리수별로 split 하기 위해 String으로 변환
String xToStr = String.valueOf(x);
//변환한 x를 각자리수별 split
String[] xStr = xToStr.split("");
//다시 int형으로 넣을배열하나 생성
int[] xInt = new int[xStr.length];
//int형배열에 집어넣기
for(int i = 0; i < xStr.length; i++){
xInt[i] = Integer.parseInt(xStr[i]);
}
//각자리수의 합 초기화
int sum = 0;
//각자리수의합 집어넣기
for(int a : xInt){
sum += a;
}
//조건달성하면 true, 아니면 false
if(x % sum == 0){
answer = true;
}
return answer;
}
1. split하기 위해 String으로 형변환해서 배열에 넣기
2. 다시 int 형으로 바꿔 배열에 넣기
3. 각자리수의 합 구하기
4. 조건달성여부 확인하기
이렇게 풀었는데 너무 비효율적인거같다. int형의 각 자리수를 더하는 다른 방법이 있지않을까? 다른 풀이를 한번 보자.
public boolean solution(int x) {
int originalX = x; // 원래의 x 값을 저장해둠
int sum = 0;
while (x > 0) {
sum += x % 10; // 현재 자릿수를 더함
x /= 10; // 다음 자릿수로 이동
}
return originalX % sum == 0;
}
x/=10으로 다음 자리수로 이동하는거에 이마를 탁 쳤다.
이생각을 못하다니..
그리고 return을 저런식으로 하면 되는걸 굳이 answer = true; 이렇게 했다. 내가 너무 초보같이 풀었다.
이 풀이를 잘 기억해두자.
'Java > 알고리즘' 카테고리의 다른 글
콜라츠 추측 (0) | 2024.01.09 |
---|---|
두 정수 사이의 합 (1) | 2024.01.08 |
정수 내림차순으로 배치하기 (1) | 2024.01.04 |
뒤에 있는 큰 수 찾기 (0) | 2023.11.22 |
주식 가격 (1) | 2023.11.21 |