인프런 커뮤니티 질문&답변

잼코님의 프로필 이미지
잼코

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

5-B : erase()를 이용한 풀이

안녕하세요. 5 - B 질문있습니다.

작성

·

193

0

안녕하세요.

5 - B 문제 풀이 이후 시간 초과가 나서 이것 저것 찾아봐도 어디서 시간 복잡도가 올라간 것인지 궁금해 질문 남기게 되었습니다.

기존에 split 함수를 구현했던 것에서 착안하여 erese()를 사용하며 계속해서 문자열을 재구성하는 방식으로 구현했습니다.

http://boj.kr/839e5d81df42477cae93f08c8c706222

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 잼코님 ㅎㅎ

시간초과가 나는 부분은

이부분인 것 같습니다.

 while ((pos = s.find(boom)) != string::npos) {

find라는 함수는 O(N)의 시간복잡도를 가집니다.

즉,

문자열의 최대 길이

1,000,000

계속해서 반복해서 찾고 있는 셈이 되는 것이죠.

 

폭발문자열이 최소 1이라고 했기 때문에 최악의 경우에는 이렇게 되는 것이죠.

1,000,000

999999

999998

...

이런 것들이 계속해서 반복해서 일어나게 되며 시간초과가 뜨게 되는 것 같습니다.

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제가 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

잼코님의 프로필 이미지
잼코

작성한 질문수

질문하기