저 차이는 알고리즘이 아니라 언어의 특성 때문에 생기는 문제입니다.
언어를 지원하기 위한 가장 기본적인 라이브러리의 크기가 크게 차이가 나기 때문입니다.
참고로 BOJ에서는 이런 언어의 차이를 보정하는 방안으로 Python 계열로 제출하는 답안에 대해서는 실행시간 +10초, 메모리 +512MB 의 여유를 줍니다.
4673번 - 셀프 넘버
코드를 조금만 바꾸면 c언어 같은 경우, 3476KB에서 2176KB로 낮출 수 있습니다.
c 배열을 함수 d 내에 선언하지 않고 전역변수로 선언한다면..
파이썬 같은 경우, 동적 타입 언어라서 그런 것도 있고요.
n을 string (List)으로 변환하고, 이렇게 변환한 것을 가지고 다시 int형으로 다시 변환하니 시간이 더 걸리지요.
mk님 코드를 optimize 한 결과..
6.1초에서 0.7초로 줄었습니다. 이 과정에서 제가 한 일은
(1) int형에서 String List 형으로 convert하는 것, 그리고 다시 String List형을 int 형으로 Convert하는 연산을 하지 않은 것.
(2) 이미 자릿수 합이 계산된 숫자는 더 이상 계산하지 않게 한 것.
이미 자릿수를 계산한 경우, 또 계산하는 건 낭비거든요.
(3) d(n)을 한 것이 셀프 넘버면 더 이상 탐색을 하지 않고 break를 건다.
(3)까지 한 게 이 코드입니다.
이렇게 하면 3.x초에서 0.07초로 단축시킬 수 있겠네요.
댓글을 작성하려면 로그인해야 합니다.
mhkim4886 6년 전