반응형
문제
해결 방법
문자열을 순회하며 더미 문자열에 순회한 글자를 추가하며 진행한다. 이후, 단어가 완성되는 조건 [ex)띄어쓰기를 입력받았다면 이전까지 입력 받은 문자열은 한 단어]을 만난다면 여지껏 저장해둔 더미 문자열을 조건에 따라 뒤집거나/뒤집지 않은 상태로 정답 문자열에 추가한다. 이후 더미 문자열은 초기화한다.
아쉬웠던 점
공백을 따로 추가해주는 부분이 뭔가 아쉽다. 더 깔끔하게 할 수 있을 것 같은데..
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string Str, Ans, StrSave;
bool Check = false; //괄호가 진행중인지 체크
getline(cin, Str);
Str += " ";
for (auto i : Str)
{
//단어의 종료 트리거 (괄호 외부에서 띄어쓰기 만나거나, 괄호의 시작을 만났을 때)
//트리거 발생 시, 더미 문자열에 저장되어 있는 문자를 뒤집어서 정답에 더해줌.
if (!Check && (i == ' ' || i == '<'))
{
if (i == '<')
Check = true;
reverse(StrSave.begin(), StrSave.end());
Ans += StrSave;
if (i == ' ')
Ans += ' ';
StrSave = "";
}
//괄호 내부와 공백 이외의 외부 문자들 더미 문자열에 더해줌
if(Check || i != ' ')
StrSave += i;
//괄호가 닫힌다면 더미 문자열에 있는거 그대로 추가
if(i == '>')
{
Check = false;
Ans += StrSave;
StrSave = "";
}
}
cout << Ans;
}
|
cs |
*cin 이 아닌 getline를 사용해야 공백 포함하여 입력이 받아진다.
반응형
'코딩 > 문제풀이-백준' 카테고리의 다른 글
백준 1694 - FEN 체스 (C++) (0) | 2021.07.15 |
---|---|
백준 14499번 - 주사위 굴리기 (C++) (0) | 2021.07.14 |
백준 2606번 - 바이러스 (C++) (0) | 2021.07.09 |
백준 2164 - 카드2 (C++) (0) | 2021.05.07 |
백준 1916 - 최소비용 구하기 (C++) (0) | 2021.05.07 |
댓글