백준#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
의 입력 파라미터를 오브젝트로 넘겨주니 해결됐다.