5430번 - AC
16%에서 시간초과가 뜨는데, 코드를 가볍게 짜는 방법이 있나요?
파싱이나 리버스 하는 부분에서 시간초과가 되는 것 같은데... 도와주세요!...!
리버스 함수의 연산 시간은 당연히 리스트의 길이에 비례합니다. 즉, 덱의 장점이 활용되지 못하고 있습니다.
짝수 번 reverse하면 결국 제자리라는 것을 이용해 보세요.(+아시다시피 덱은 앞과 뒤의 요소 삭제시 복잡도가 상수에 근접합니다.)
그리고 최초 문자열을 파싱하며 덱에 int형으로 요소들을 관리해보는 게 어떨까요?
감사합니다! 아래와 같이 바꿔봤습니다. 하지만 리버스를 줄이는 방법이 잘못된 것 같은데, 혹시 좋은 방법이 있을까요?
'D'를 만나기 전까지 등장한 'R'의 개수를 x라고 해봅시다.
이때 x가 만약 짝수라면 결국 덱에서 맨 앞의 원소를 삭제하는 행위(pop_front())와 같고, x가 홀수라면 결국 덱에서 맨 뒤의 원소를 삭제하는 행위(pop_back())와 같겠죠.
즉, 위에서 말씀드렸다시피 reverse(a.begin(), a.end()); 라는 행위 자체가 필요 없다는 것입니다.
그리고 57행과같은 문장은 undefined behavior을 일으킬 수 있는 문장입니다.
감사합니다!
해결됐습니다!
댓글을 작성하려면 로그인해야 합니다.
minu452 1년 전
16%에서 시간초과가 뜨는데, 코드를 가볍게 짜는 방법이 있나요?
파싱이나 리버스 하는 부분에서 시간초과가 되는 것 같은데... 도와주세요!...!