문제
문자열을 입력받으면 그 문자열을 10글자씩 끊어서 출력하면 되는 문제였다. substring과 같은 메소드를 사용하는 것이었고, c++에서는 substr()을 이용하여 풀 수 있을 것으로 생각했다.
접근
1차
#include <iostream>
using namespace std;
int main() {
string str;
cin >> str;
while (true) {
cout << str.substr(0, 10) << endl;
str = str.substr(10);
if (str.length() <= 10) {
cout << str << endl;
break;
}
}
}
문자열을 받은 다음, 무한루프 안에서 문자열을 10글자씩 끊어 출력하고, 마지막에 10글자 이내의 문자열만 남을 경우 그 나머지를 출력하고 루프를 종료하고자 했다. 결과는 runtime error(out of range)였다.
2차
#include <iostream>
using namespace std;
int main() {
string str;
cin >> str;
while (true) {
cout << str.substr(0, 10) << endl;
str = str.substr(10);
if (str.length() <= 10) {
cout << str << endl;
break;
}
}
return 0;
}
처음에는 런타임 에러가 왜 뜨는지 이해를 하지 못해서 구글에 검색하다가, 런타임 에러가 발생할 수 있는 경우는 매우 다양한데, main함수가 0이 아닌 값을 리턴하는 경우에도 런타임 에러가 발생할 수 있다고 했다. 마침 코드에 return 0이 없어서 혹시나 하고 입력하고 돌려봤는데 같은 런타임 에러가 떴다. 그제서야 그 옆에 있는 out of range가 눈에 들어왔다. 아무래도 어떤 구간에서 범위를 벗어나서 참조를 하려고 하는 듯 해 보인다.
3차
#include <iostream>
using namespace std;
int main() {
string str;
cin >> str;
for (int i = 0; i < str.length(); i += 10) {
cout << str.substr(i, 10) << endl;
}
return 0;
}
무한루프를 돌려서 문자열을 끊어내는 로직에서, 무한루프때문에 out of range가 발생하는 것으로 보고 for문을 이용하여 반복할 길이를 정해주었다. 또한 step을 10 단위로 넣어줘서 문자열을 10개씩 끊어서 재선언하는 것을 대신하였다. 이렇게 하니 문제를 해결할 수 있었다.
좀 더 공부를 해 봐야 정확하게 어떤 포인트에서 out of range가 발생했는지 알 수 있을 것 같다. 이번에는 런타임 에러를 겪어본 경험이 없어서, 새로운 결과를 맞게 되어 기록하고자 이 문제의 풀이를 적었다.
'Koala - 8기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준 5363번 /python] 요다 (0) | 2022.09.18 |
---|---|
[백준/Python] 1417번: 국회의원 선거 (0) | 2022.09.18 |
[백준/Python] 5597번: 과제 안 내신 분..? (0) | 2022.09.18 |
[백준/Python] 16430 -제리와 톰 (0) | 2022.09.18 |
[C++] 백준 10173번: 니모를 찾아서 (0) | 2022.09.18 |