listdata.count는 listdata의 원소를 쭉 둘러보는 데다가 안에 중복된 원소도 많이 들어가 있어서 매우 비효율적입니다. listdata와 result 대신 N이 10^6 이하이므로 크기 N+1짜리 배열 A를 만들어서 x가 등장한 적 있으면 A[x]=1, 아니면 A[x]=0이도록 하는 방법이 있습니다.
1463번 - 1로 만들기
list에 1이 들어있나를 확인하는 거니까 `1 in listdata`같은 방법을 쓸 수 있어요. 이렇게 하면 첫번째로 1을 확인했을 때 바로 True를 반환해서 더 효율적이예요.
그런데 저같으면 listdata를 list 대신 set으로 할 것 같네요. set을 쓰면 hash를 써서 `1 in listdata`을 확인할 때 걸리는 시간이 더 짧아요.
지금 그리고 이 함수를 재귀호출 없이 구현할 수 있거든요. while 문 써서요. return func(new, counter)의 new랑 counter를 그대로 listdata랑 counter에 대입하고 위로 올라간다는 느낌으로 생각하면 이해하기 쉬우려나요.
일단은 수정한 코드를 붙여놨어요.
그나저나 19~21행을 실행시키기 전에 recursion depth 오버플로우가 생긴다고 하셨는데, 에러 메세지 볼 수 있을까요?
댓글을 작성하려면 로그인해야 합니다.
y_ht 6년 전
현재 구현해놓은 func함수는 파이썬으로 실행시 오버플로우가 납니다.
근데 func함수에 원하는 값을 대입하면 잘만 돌아갑니다.
아무래도 중간에 result=[] 부분이 문제가 되는 듯 싶은데,
제 능력으로는 해결하지 못하겠습니다 ㅠㅠ