2023. 5. 21. 16:25, 알고리즘/BOJ
boj 11656번 문제를 풀때, 처음에 작성한 코드의 형태는
#include <bits/stdc++.h>
using namespace std;
vector<string> stArr;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
string st;
cin >> st;
int cnt = 0;
//int len_st = st.length();
for (int i = 0; i <st.length(); i++) {
cout << st.length();
st.erase(0,1);
stArr.push_back(st);
cnt++;
}
for (auto i : stArr)
cout << i << '\n';
cout << cnt;
}
이런 형태였다.
이때에 출력을 해보면,
이런식으로 joon까지만 시행되고 그 뒤로는 시행이 되지 않았다.
왜 이런가 곰곰이 생각해보다가, 코드를
#include <bits/stdc++.h>
using namespace std;
vector<string> stArr;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
string st;
cin >> st;
int cnt = 0;
int len_st = st.length();
for (int i = 0; i <len_st; i++) {
cout << st.length();
st.erase(0,1);
stArr.push_back(st);
cnt++;
}
for (auto i : stArr)
cout << i << '\n';
cout << cnt;
}
이렇게 수정해서, 처음 받아들인 baekjoon이라는 글자의 갯수만큼의 값을 int len_st에 복사해서 넣어주고,
그 복사한 값인 len_st를 for문에 넣었을때의 시행 결과를 보면,
이렇게 내가 원하는 시행 결과를 나타내주는걸 볼 수 있다.
계속해서 for문의 범위를 st.length() 보다 작게 설정하고, 함수 내에서 erase를 통해서 st의 길이를 줄이다 보니까
한번 for문이 돌고 다음번째가 되었을때 st.length의 길이가 달라지기 때문에 4에 도달했을때 for문이 종료되었다.
i가 순차적으로
i=0 일때, 8보다 작은 경우까지,
i=1 일때, <7보다 작은 경우까지, (6까지)
i=2 일때, <6 보다 작은 경우까지(5까지)
i=3일때, <5보다 작은 경우까지(4까지)
i=4일때, <4보다 작은 경우까지(3까지)
형태로 바뀌어 가기 때문에,
이때 시행되는 연산의 횟수는 4회가 되고, 그래서 아래 확인하려고 둔 cnt 변수의 값이 4로 최종 출력 되는것이었다.
이번 문제를 풀때 생각없이 st.length(); 값을 바로 사용하였는데,
다음부터는 이 값을 int 변수에 복사한뒤에 그 복사된 값을 사용하여서 이 st.length()값이 줄어들 수 있는 경우의 영향을 받지 않도록 하자.
'알고리즘 > BOJ' 카테고리의 다른 글
boj 11656번 문제를 통해 접하게된 substr() 함수에 대해서. (0) | 2023.05.21 |
---|---|
boj 11656번 문제를 통해 접하게된, sort() 후의 출력과 sort() 하기 전 출력의 개행문자 의 차이점. (해결. 엉뚱한 곳을 찾고있었다) (0) | 2023.05.21 |
boj 10814번. stable_sort()를 활용하지 않고 sort()를 사용해서 먼저 입력된 순서를 보존하는 방법. (0) | 2023.05.21 |
boj 1181번 문제를 통해 접하게된 erase(),unique()를 활용한 중복 요소 제거 방법. (0) | 2023.05.20 |
boj 1181번 문제를 통해 보는 sort의 compare 함수의 람다표현식으로의 사용. (0) | 2023.05.20 |
Comments, Trackbacks