BOJ
BOJ::5363 요다
BOJ Bronze 2
BOJ::5363 요다
- Link : BOJ::5363
- Level : Bronze 2
시사점
- 입력 관련 좋은 문제입니다.
- getline의 경우 ‘\n’도 입력 받습니다.
- 즉, 엔터를 입력받습니다.
- 이 이유때문에, 예를 들어 입력이 4줄 들어온다고 해서 4번 입력받아서 바로 출력하면,
- 첫번째 줄은 공백이고, 나머지 세개의 줄에는 1,2,3번에 대한 입력이 출력되는 것입니다.
- 따라서, cin에 들어온 input을 깔끔하게 flush시켜줄 필요가 있습니다.
- cin.ignore()를 통해 가능합니다.
키
이해(x)
설계, 손 코딩(x)
- 손으로 중심이 되는 코드를 구현합니다.
시간 복잡도
공간 복잡도
손 코딩 후 문제 리뷰(x)
- 빼먹고 손 코딩 한 것이 있는지 확인합니다.
구현(x)
함수 List
업데이트 되는 변수
- 대부분의 디버깅 문제는 업데이트 되는 변수에서 발생합니다.
실제 구현
#include<bits/stdc++.h>
#define endl '\n'
#define rep(i,a,b) for(int i=a;i<b;i++)
#define r_rep(i,a,b) for(int i=a;i>b;i--)
using namespace std;
int main(){
//freopen("input.txt", "r", stdin);
ios_base::sync_with_stdio(false);
cin.tie(0);
int tc;
string str;
cin >> tc;
cin.ignore();
// getline은 '\n' 즉, 엔터도 입력받음.
// 그래서, 엔터 친 경우 한번 flush 해줘야함.
while (tc--){
getline(cin, str);
vector<string> ans;
int prev = 0;
int i = 0;
for (i = 0; i < str.size();i++){
if (str[i] == ' '){
ans.push_back(str.substr(prev, i-prev));
prev = i+1;
}
}ans.push_back(str.substr(prev, i - prev));
rep(i, 2, ans.size()){
cout << ans[i] << " ";
}
rep(i, 0, 2){
cout << ans[i] << " ";
}cout << endl;
}
return 0;
}
구현 후 코드리뷰 + 예제 돌려보기(x)
- 바로 예제를 넣어서 테스트 해보기 전에, 코드를 한 번 리뷰하고, 예제의 입력이 이런식으로 왔을때 전체 코드가 어떤 식으로 순차적으로 진행되는지 답은 잘 도출될 것 같은지 확인합니다.