본문 바로가기

코딩 이야기/백준 풀이

백준 4673번: 셀프 넘버 c++ 코드(구현)

반응형

#include<iostream>

using namespace std;

int main(){
    int numbers[10001];
    int temp, temp1, temp2, temp3, temp4;
    for(int i=1; i<10001; i++){
        numbers[i-1] = i;
    }
    for(int i=1; i<10001; i++){
        if(i<10){
            temp = i + i;
            numbers[temp-1] = -1;
        }else if(i<100){
            temp = i/10;
            temp1 = i%10;
            temp2 = i + temp + temp1;
            numbers[temp2-1] = -1;
        }else if(i<1000){
            temp = i%10;
            temp1 = (i/10)%10;
            temp2 = (i/100);
            temp3 = temp + temp1 + temp2 + i;
            numbers[temp3-1] = -1;
        }else if(i<10000){
            temp = i%10;
            temp1 = (i/10)%10;
            temp2 = (i/100)%10;
            temp3 = (i/1000);
            temp4 = temp + temp1 + temp2 + temp3 + i;
            if(temp4-1 <= 10000){
                numbers[temp4-1] = -1;
            }else{
                continue;
            }
        }else if(i == 10000){
            numbers[i-1] = -1;
        }
    }
    for(int i=0; i<10000; i++){
        if(numbers[i] == -1){
            continue;
        }else{
            printf("%d \n", numbers[i]);
        }
    }
}
설명

코드가 내가 봐도 상당히 더럽다. numbers라는 크기 10001의 배열을 선언하고, 1부터 10000까지 채워준다. 그 후 for문에서 1-10000까지로 만들 수 있는 셀프 넘버가 아닌 수를 다 찾고, numbers의 찾은 수 번째 인덱스를 -1 해준다. 다 마친 후에 -1인 것만 출력을 안하면 된다.

문제점

실수로 배열의 크기가 넘는 값을 참조하는 에러가 나서 런타임에러가 났다.

반응형