여러 문제가 있는데 크게 unique 함수와 erase 함수에 대한 잘못된 이해, 그리고 문제도 잘못 이해하신 것이 원인입니다.
- unique 함수가 어떠한 중복도 발견하지 못했다면, 이는 end iterator를 반환합니다. end iterator를 erase하는 것이 안전한지는 잘 모르겠습니다.
- unique 함수는 string::iterator를 반환하므로, 문자열에서 이를 erase 하는 것은 그 iterator가 가리키는 문자 하나를 지우는 것입니다. 그리고 그 뒤의 문자들을 전부 한 칸씩 당겨옵니다. 예를 들어 ABBCC에서 이 작업을 수행하면, unique 함수는 ABCCC를 만들고 4번째 문자를 가리키는 iterator를 반환하는데, 여기에 erase를 수행하면 5번째에 있던 C가 하나 당겨져 와서 ABCC라는 문자열이 만들어집니다. 해결하는 방법으로는 begin부터 이 iterator까지의 substr를 빼내거나, 이 iterator부터 끝까지를 통째로 erase 하는 방법 등이 있겠네요.
- 애초에 문제 이해를 잘못하셨습니다. 각 문자가 몇 개 있는지가 중요한 문제인데 중복을 제거해버리면 안 되죠. 그리고 '같은 구성'이 아니라 '비슷한 구성'인 단어들을 구하는 것이므로, 첫 번째 단어와 같은지만 체크하는 게 아니라 하나의 문자를 추가하거나 빼서 같은 구성이 되는 경우까지 체크해야 됩니다.
cepiloth 5년 전
첫 번째 입력받은 문자열과 비교 한다고 생각해서
모든 문자열에 중복을 제거하고
첫 문자와 비교하여 카운트 하도록 구현 하였는데..
런타임 에러가 발생합니다.
접근 방법이 잘못 된거 일까요.?