본문 바로가기
코딩/문제풀이-백준

백준 17413번 - 단어 뒤집기 2 (C++)

by 남대현 2021. 7. 9.
반응형

문제

해결 방법

문자열을 순회하며 더미 문자열에 순회한 글자를 추가하며 진행한다. 이후, 단어가 완성되는 조건 [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를 사용해야 공백 포함하여 입력이 받아진다.

반응형

댓글