[백준] 4673번 셀프 넘버 풀이 코드 (C/C++/Java 자바/Python 파이썬)

풀이

최댓값이 10000 임을 이용해 조건문과 나머지 연산을 써서 각 자릿수를 더해 배열 값으로 처리할 수 있습니다. 파이썬에선 글자 자체를 리스트로 만들면 한 자리씩 나뉘기 때문에 각 자릿수 더하기가 용이합니다.


코드

C

#include<stdio.h>

int d[10001];

int dn(int i) {
    int res = i;
    if (i >= 10000) { res += i / 10000; i %= 10000; }
    if (i >= 1000) { res += i / 1000; i %= 1000; }
    if (i >= 100) { res += i / 100; i %= 100; }
    if (i >= 10) { res += i / 10; i %= 10; }
    return res += i;
}

int main() {
    int i = 0;
    for (i = 1; i <= 10000; i++) {
        d[dn(i)] = 1;
    }
    for (i = 1; i <= 10000; i++) {
    if (!d[i]) printf("%d\n", i);
    }
    return 0;
}

C++

#include<iostream>
using namespace std;

int d[10001];

int dn(int i) {
    int res = i;
    if (i >= 10000) { res += i / 10000; i %= 10000; }
    if (i >= 1000) { res += i / 1000; i %= 1000; }
    if (i >= 100) { res += i / 100; i %= 100; }
    if (i >= 10) { res += i / 10; i %= 10; }
    return res += i;
}

int main() {
    for (int i = 1; i <= 10000; i++) {
        d[dn(i)] = 1;
    }
    for (int i = 1; i <= 10000; i++) {
        if (!d[i]){
            cout<<i<<endl;
        }
    }
    return 0;
}

Java

public class Main {
    public static void main(String[] args) {
        int[] d = new int[10001];
        for (int i = 1; i <= 10000; i++){
            if(dn(i)<10001){
                d[dn(i)] = 1;
            }
        }
        for (int i = 1; i <= 10000; i++){
            if (d[i] != 1){
                System.out.println(i);
            }
        }
    }
    
    public static int dn(int i){
        int res = i;
        if (i >= 10000) { res += i / 10000; i %= 10000; }
        if (i >= 1000) { res += i / 1000; i %= 1000; }
        if (i >= 100) { res += i / 100; i %= 100; }
        if (i >= 10) { res += i / 10; i %= 10; }
        return res += i;
    }
}

Python

def dn(i):
    res = i
    for n in list(str(i)):
        res += int(n)
    return res

d = []

for i in range(1, 10001):
    d.append(dn(i))

for i in range(1, 10001):
    if i not in d:
        print(i)

문제 출처

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

Related posts

블로그 이사

[Codeforces] 50A Domino piling 풀이 코드 (C/C++/Java /Python)

[Codeforces] 1538B Friends and Candies 풀이 코드 (C/C++/Java /Python)