공부 흔적남기기

백준 4673 셀프넘버 본문

코테/백준

백준 4673 셀프넘버

65살까지 코딩 2022. 1. 19. 10:14
728x90
반응형
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        int[] selfNumberList = new int[10001];
		//1부터 10000까지 확인해줘야 하기 때문에 10001길이의 배열 생성
        int i =1;
        while(true){
        	//10001이라면 break
            if(i == 10001){
                break;
            }
            //i1의 셀프넘버 확인해주고 10000보다 작다면 1로변경
            int i1 = selfNumber(i);
            if(i1 <=10000) {
                selfNumberList[i1] = 1;
            }
            i++;
        }
		//출력
        for(int i2 =1; i2<selfNumberList.length; i2++){
            if(selfNumberList[i2] == 0){
                System.out.println(i2);
            }
        }
    }
	//셀프넘버 확인해주는 함수
    static int selfNumber(int n){
        String tmp = String.valueOf(n);
        for(int i =0; i<tmp.length(); i++){
            n+= Integer.parseInt(String.valueOf(tmp.charAt(i)));
        }
        return n;
    }

}

과거에 C++로 풀었던 것과 비교

#include <iostream>
#include <vector>
using namespace std;

int d(int num)
{
//굉장히 놀랍다 ^^ 삽을 이렇게나 팠다니 
	int sum(0);
	if ((0 < num) && (num < 10))
		sum = num + num;
	if ((10 <= num) && (num < 100))
		sum = num + (num / 10) + (num % 10);
	if ((100 <= num) && (num < 1000))
		sum = num + (num / 100) + ((num % 100) / 10) + ((num % 100) % 10);
	if ((1000 <= num) && (num < 100000))
	sum = num + (num / 1000) + ((num % 1000) / 100) + (((num % 1000) % 100) / 10) + (((num % 1000) % 100) % 10);
	return sum;
}

int main()
{
//진짜 꾸역꾸역 열심히 풀은 흔적이...
	vector<bool>arr(10001, true);
	for (int i = 0; i <= 10000; i++)
	{
		arr[d(i)] = false;

	}
	for (int i = 0; i <= 10000; i++)
	{
		if (arr[i])
		{
			cout << i << endl;
		}
	}
}

속도나 메모리 면에서 c++가 확실히 성능이 좋다.

728x90
반응형

'코테 > 백준' 카테고리의 다른 글

백준 1157 단어공부 자바  (0) 2022.01.20
백준 2941 크로아티아 알파벳 자바  (0) 2022.01.20
백준 4344 평균은 넘겠지  (0) 2022.01.19
백준 1110 더하기 사이클  (0) 2022.01.18
백준 2884 알람 시계  (0) 2022.01.18