num = str(input())
result = ''
for i in range(len(num)):
if(num[i]=='0'):
result += '000'
elif(num[i]=='1'):
result += '001'
elif(num[i]=='2'):
result += '010'
elif(num[i]=='3'):
result += '011'
elif(num[i]=='4'):
result += '100'
elif(num[i]=='5'):
result += '101'
elif(num[i]=='6'):
result += '110'
elif(num[i]=='7'):
result += '111'
print(int(result))
그러나 나온 결과는 시간초과!
원인을 파악해보니, Python에서 문자열을 합칠 때, +를 사용하는 것을 지양해야 한다.
문자열을 합칠 때, 다른언어와 다르게 파이썬의 문자열(String) 자료형은 immutable type이라, 문자열 내용을 복사할 수 없기 때문에, +로 합칠 경우 각각의 문자열을 새로운 메모리에 복사하여 새 문자열을 만든다.
왜, 파이썬의 문자열이 immutable type일까? 다른 불변 객체로는 정수, 부동 소수점, 튜플 및 부울이 있다.
name_1 = "Varun" name_2 = "Varun" print("id of name_1 = ", id(name_1)) print("id of name_2 = ", id(name_2)) 위의 코드를 실행시키면, 우리는 name_1, 2의 아이디가 동일한 것을 확인 할 수 있다. Python 에서 문자열은 변경 불가능하여 프로그래머가 객체의 내용을 변경할 수 없는데, 이것은 불필요한 버그를 피한다.
그래서 사실상 시간 복잡도가 O(n^2) 정도가 된다. 따라서, ''.join()을 사용해 문자열을 합쳐야 계산과정에서의 시간 복잡도가 줄어들 것이다.
그러면 수정해주자.
num = str(input())
result = []
for i in range(len(num)):
if(num[i]=='0'):
result.append('000')
elif(num[i]=='1'):
result.append('001')
elif(num[i]=='2'):
result.append('010')
elif(num[i]=='3'):
result.append('011')
elif(num[i]=='4'):
result.append('100')
elif(num[i]=='5'):
result.append('101')
elif(num[i]=='6'):
result.append('110')
elif(num[i]=='7'):
result.append('111')
print(int("".join(result)))