[잘못한거나 햇갈린 점 ?]
구현은 되게 쉬운데 문제를 제대로 이해를 못해서 조금 고민을 했습니다.
그래서 이 문제가 무엇을 묻는건지 찾고 나니 의외로 구현은 정말 간단 했습니다.]
[해설 및 풀이]
이 문제의 경우는 입력값은 없고 10000의 숫자 안에서 셀프 넘버를 찾는 문제입니다.
즉 쉽게 생각해서
예제를 한번 봅시다.
1은 셀프넘버 입니다.
1 + 1은 = 2가 됩니다.
즉 각자리의 한자리 수 + 자기 자신을 더한 값이 나오면 이 값은 셀프넘버가 아닙니다.
즉 1 + 1 = 2가 나오기 때문에 2는 셀프넘버 X
2 + 2 = 4
즉 4는 셀프넘버 X
3으로 예시를 해봅시다.
3 + 3 = 6이 됨으로 6은 셀프넘버 X
4도 마찬가지로 4 + 4 = 8임으로 8은 셀프넘버 X
또한 4도 셀프넘버가 될 수 없죠? 이유는 이미 2에서 2+2 = 4가 나왔기 때문에
셀프넘버가 안됩니다.
즉 1부터 각 자리를 더 하면서 더한 값이 나오면 안됩니다.
5로 비교해보죠
5 + 5 = 10임으로 10은 셀프넘버 X
그다음 6으로 봅시다.
6 + 6 = 12
12는 셀프넘버 X
하지만 6도 셀프넘버가 될 수 없죠?
왜냐하면 3에서 이미 3 + 3 = 6을 했기 때문에 6은 셀프넘버가 될 수 없습니다.
그렇다면 코드는 어떤식으로 짜야 할까요?
1부터 시작해서 각 자리 수를 때서 값을 더 함.
그 값 더한 것을 배열이든 list든 넣음.
이렇게 하면
1 + 1 = 2
2 + 2 = 4
3 + 3 = 6
4 + 4 = 8
즉 이런식으로 셀프넘버가 아닌 값들이 저장됩니다.
그 값들을 다 담은 후
리스트를 출력할때 이 값이 들어있지 않다면 값을 출력하면 됩니다.
package com.algorithm;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main{
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for(int i=1; i<=10000;i++){
int temp = i;
int sum = i;
while (temp > 0){
sum = sum + (temp%10); // 각 자리수를 자르기
temp = temp/10;
}
list.add(sum); //더한 값을 넣는다
}
Collections.sort(list);
for(int i=1; i<=10000;i++){
if(!list.contains(i)){ // 만약 이 값이 없다면 셀프넘버임으로 출력
System.out.println(i);
}
}
}
}
'백준 알고리즘 > 브루트 포스(완전 탐색)' 카테고리의 다른 글
[백준 알고리즘 2422] 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 자바 [브루트 포스] (2) | 2023.10.17 |
---|---|
[백준 알고리즘 - 숫자게임 2303] 자바 -브루트 포스 [실버 4] (1) | 2023.10.06 |
[백준 1251 단어 나누기] - Java 자바 [브루트 포스] (1) | 2023.10.02 |
[백준 2003] 수들의 합 2 Java - [투 포인터 , 브루트 포스] (0) | 2023.10.01 |
[백준 1543] - 문서 검색 [자바] 실버 5 (0) | 2023.09.28 |