1일 1백준

1일 1백준 : 2일차 4673번 셀프 넘버

gaonhae 2022. 4. 20. 16:06

1일 1백준 2일차 두번째 문제, 오늘 푼 문제는 4673번 문제인 "셀프 넘버"이다.

 

 

 

 

4673번 "평균은 넘겠지" 문제 바로가기

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

 

 

풀면서 느낀 점은, 내가 아직 배열에 많이 미숙하다는 점이다.

배열의 인덱싱이라던가 큰 배열의 효율적인 처리 등 좋은 알고리즘을 떠올리는 데에 많은 시간이 걸린다.

그래도 하다보면 점점 나아지겠지?

 

나는 함수를 만들어서 이 문제를 풀었다.

이 함수는 어떤 수를 입력하면 n을 입력하면 문제에서 제시한 과정을 거친 뒤 반환해주는 함수이다.

이렇게 함수를 이용한 방식보다 더 효율적인 알고리즘이 있을 것 같은데, 지금 머리로는 떠오르지 않는다.

 

 

 

 

 

 

 

 

 

 

아래로 내리면 정답 코드가 나옵니다. 문제를 아직 풀지 않으신 분들은 주의해주세요.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

import java.util.Scanner;
import java.util.concurrent.CountDownLatch;
import java.util.Arrays;

class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Test tt = new Test();

        int[] numarr = new int[10000];

        for (int i = 0 ; i < 10000 ; i++){
            numarr[i] = i+1;
        }

        for (int i = 1 ; i <  10000 ; i++){
                numarr[tt.selfnum(i)] = 0;
        }
        
        for(int i = 0 ; i < 10000-1 ; i++){
            if(numarr[i] != 0){
                System.out.println(numarr[i] - 1);
            }
        }
        
        sc.close();
        
    }
}

class Test{  
    int selfnum(int a){
        String stra = Integer.toString(a);
        for(int i = 0 ; i < stra.length() ; i++){
            a += ((int)stra.charAt(i) - 48);
        }
        if(a >= 10000){
            return 0;
        }
        else{
            return a;
        }
    }
}