[백준] 4673번 : 셀프넘버 - JAVA(자바)

Life is ninanino·2022년 10월 23일
0

[백준] JAVA

목록 보기
22/37
post-thumbnail

https://www.acmicpc.net/problem/4673


문제부터 어렵다
셀프 넘버는 n과 n의 각 자리수를 더하여 만들어질 수 없는 숫자, 즉 임의의 n에 대하여 d(n)으로 return될 수 없는 숫자라는 의미이다.
출력값에 1,3,5,7,9만 보고 소수빼기인줄 알았다

맨 처음엔 일반 배열에 넣었다가 출력하는 로직을 짤때 복잡해져서
다른 코드를 참고해서 boolean형 배열로 바꿔주었다..
값 비교해서 false값만 출력하면 되니까 훨씬 편했다

++정답코드

package 백준;// @ author ninaaano

public class b_4673 {
    public static void main(String[] args) {
        boolean[] check = new boolean[10000];

        for (int i = 1; i < 10001; i++) {
            int num = i;
            int sum = i;
            while (num != 0) {
                sum +=(num % 10); // 첫째 자리수
                num = num / 10; // 10을 나눠서 첫 째 자리 없애기
            }
            if(sum < check.length){
                check[sum] = true;
            }
        }
        for(int j=1; j<check.length; j++){
            if(check[j]==true)
                continue;
            System.out.println(j);
        }
    }
}

++참고코드

list나 set을 사용해서 푸는 방법도 있었다.
파이썬 코드는 나중에 자바 코드로 변환하는 작업을 해봐야징..
출처를 남기려했는데 날아가버렸다...😱😱😱

// 참고 파이썬코드, list, set

def d(n):
    num = list(str(n))
    asw = n
    for i in range(len(num)):
        asw += int(num[i])
    return asw

SET = list(range(1,10001))
for n in range(1,10001):
    if d(n) in SET:
        SET.remove(d(n))
    
for i in range(len(SET)):
    print(SET[i])
// 참고코드, HashSet사용

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args){
        Set<Integer> set = new HashSet<>();
        int cnt = 1;
        while(cnt <= 10000){
            char[] chars = String.valueOf(cnt).toCharArray();
            int tmp = cnt;
            for(char data : chars){
                tmp += Integer.parseInt(String.valueOf(data));
            }
            
            if(!set.contains(cnt)){
                System.out.println(cnt);
                set.add(tmp);
            } else {
                set.add(tmp);
            }

            cnt++;
        }
    }
}
profile
백엔드 프로그래밍을 공부하고 있습니다. AWS, 클라우드 환경에 대해 관심이 많습니다.

0개의 댓글