sejungpk   6년 전

7%에서 시간초과가 나는데 도무지 알 수 가없습니다. 고수님들 부탁드립니다.

jh05013   6년 전

https://www.acmicpc.net/board/view/23037

"몇 %에서 틀렸다는 것은 의미가 없습니다. 몇 %에서 틀렸다는 내용을 올리지 마세요."

Bfs로 새로운 값을 만들 때마다 tmpV가 생성되어 비효율적으로 보입니다.

djm03178   6년 전

전반적으로 좀 비효율적인 코드이긴 합니다. 우선 string이라는 녀석은 만들어질 때마다 메모리를 일정량 할당받고 메타데이터도 일부 저장해놓아야 하기 때문에 생성과 소멸이 반복되면 상당한 불이익이 생깁니다.

이 코드에서 가장 안 좋은 부분은 86~96줄인데, 우선 string 객체인 arr[i]를 매번 복사해서 changeValue 함수에 넘겨주고 있고, tmpV도 항상 복사해서 tmpV2에 저장하고 있습니다. 총 10000개의 수가 가능하고 각각이 4개의 변환을 거칠 수 있다는 점을 고려하면, 최소 8만 번의 복사에 tmpV는 심지어 그 때까지의 길이만큼 복사해야 하는 위험성도 있습니다. 94번째 줄이 실행될 때는 복사가 또 일어나고, 그렇게 만들어진 cal 객체가 q에 또 복사되며, 나중에 q에서 꺼내올 때 또 복사를 해야 됩니다.

일단 아슬아슬하지만 AC를 받게 고쳐보았는데, 우선 changeValue가 dslr을 객체가 아닌 참조자로 받게 하고, 89번째 줄을 91번째 줄 다음으로 옮겨보았습니다.

제일 좋은 방법은 가능한 string 객체를 쓰지 않고 (특히 arr은 굳이 char 대신 string으로 할 이유가 전혀 없어 보입니다), 답을 찾는 과정을 통째로 매번 저장하는 것이 아니라 그 경로만 추적할 수 있게끔 하면 획기적으로 시간을 단축할 수 있습니다.

댓글을 작성하려면 로그인해야 합니다.