[BOJ] 4673번 셀프넘버

나르·2021년 1월 24일
0

알고리즘

목록 보기
11/15

백준#4673 셀프넘버(https://www.acmicpc.net/problem/4673)

코드 - Python

def self_num(a):
    for i in str(a):
        a+=int(i)
    return a
lst_res = [i for i in range(1,10001)]
for a in range(1,10001):
    if 0<self_num(a)<10001:
        try: lst_res.remove(self_num(a))
        except: pass
    if a in lst_res:
        print(a)

코드 - Java

import java.util.*;
public class Main {
    public static int selfnum(int a){
        String stra = Integer.toString(a);
        for(int i=0;i<stra.length();i++){
            a+=stra.charAt(i) - '0';
        }
        return a;
    }
    public static void main(String[] args) throws Exception {
		ArrayList<String> res = new ArrayList<String>();

        for(int i=1;i<10001;i++){
            res.add(i+"");
        }
        for (int i=1;i<10001;i++){
            if (1<=selfnum(i) && selfnum(i)<10001){
                try{
                    res.remove(selfnum(i)+"");
                }catch (Exception e){}
            }
            if (res.contains(i+"")){
                System.out.println(i);
            }
        }
    }
}

이 코드는 파이썬→자바로 구현하는데 꽤 애를 먹었다.
파이썬의 pass가 자바엔 없는데, 생성자가 한 개 이상인 수일 경우 try문 안에서 존재하지 않는 요소를 remove하려고 할 때 뜨는 에러를 잡기 위한거였으니 그냥 Exception으로 처리했다.
그리고 ArrayList를 정수형으로 잡으면 결과값이 다르게 출력됐는데, 아이템값으로 제거하는 파이썬의 remove와 다르게 자바의 remove는 정수형을 받으면 인덱스로 제거하기 때문인 것 같다. 따라서 리스트를 String으로 바꾸고 remove의 입력 파라미터를 오브젝트로 넘겨주니 해결됐다.

profile
💻 + ☕ = </>

0개의 댓글