그렇게 노가다인 편은 아닙니다.
다만 8번째,9번째 줄에 if d in case와 remove가 비효율 적입니다.
왜냐하면 python에서 list자료형에 in을 쓰게되면 모든 원소를 하나하나 보면서 있는지 확인하고
삭제할 때도 해당 원소를 삭제하고 자리를 하나씩 당겨야하므로
예를 들어
1 2 3 4 5 에서 3을 제거하는 방법을 보여드리면
1 2 3 4 5 => 1 2 4 4 5 (4를 원래 3위치에 덮어씀) => 1 2 4 5 5 (5를 원래 4위치에 덮어씀) => 1 2 4 5 (길이를 4개로 줄임)
이렇게 되어서 비효율적입니다.
따라서 list에 True False를 저장하고 remove대신 해당 원소를 True나 False로 바꾸는 편이 나을 것 같습니다(True일지 False일지는 정의하시기 나름입니다.)
참고하실 수 있게 코드 첨부합니다.
i+sum([..이 부분을 함수로 나타내는게 더 깔끔할 거 같은데 함수를 잘 안쓰시는 편이신거 같아 하나로 합쳤습니다.
osh1795 2년 전
풀어서 맞추기는 했는데 너무 무식하게 노가다로 구한거 같아서 질문합니다
먼저, 제가 소스 코드를 작성한 과정입니다.
우선 1~9999까지 for문을 이용해서 리스트에 넣은 다음 1~9999까지 모든 숫자의 d()를 구했습니다.
그 후 d()를 리스트에서 하나하나 제거해주는 방식으로 셀프 넘버를 구했습니다.
근데 막상 하고보니 효율적(?)이지 못하고 너무 노가다인거 같아서 여기서 불필요한 과정이 있거나, 저처럼 1~9999의 리스트에서 지워가는 방식이 아닌 다른 방식이 있는지 질문합니다.