문제 설명
https://www.acmicpc.net/problem/17413
< > 안에 있는 단어는 그대로, 그렇지 않은 단어는 거꾸로 출력하는 문제
문제 풀이법
처음에는 띄어쓰기를 기준으로 단어의 첫 시작점과, 끝 시작점을 지정해서 reverse 시키려고 했다
하지만 너무 구현이 비효율적인 것 같았다
솔직히 스택을 사용하면 된다는 생각은 못하고 있었는데, 스택이라는 힌트를 봐버려서 스택으로 구현하게 되었다
여기서 한 번 틀렸는데 틀린 예제는 > 뒤에 문자열이 나왔을 때다
스택에 넣지않고 제대로 출력하는 문자는 flag를 통해 지정해주었고, <이면 flag == true, >이면 flag == false로 설정해주려고 했다
하지만 >인 경우는 내 의도대로 else if (str[i] == '>')를 타지않고, 바로 if (flag == true)를 타버리기 때문에
> 뒤에 나오는 문자열은 그냥 그대로 출력되는 문제가 발생했다
이 부분을 수정하니 정답이었다
소스 코드
#include <iostream>
#include <algorithm>
#include <stack>
using namespace std;
stack<char> s;
void get_stack()
{
while (!s.empty())
{
printf("%c",s.top());
s.pop();
}
}
int main()
{
string str;
getline(cin, str);
bool flag = false;
for(int i = 0; i < str.size(); i++)
{
if (flag == true)
{
if (str[i] == '>')
flag = false;
printf("%c", str[i]);
}
else if (str[i] == ' ')
{
get_stack();
printf(" ");
}
else if (str[i] == '<')
{
get_stack();
flag = true;
printf("<");
}
else
s.push(str[i]);
}
get_stack();
return 0;
}
'Algorithm Study' 카테고리의 다른 글
[프로그래머스] 1단계 - 문자열 내 마음대로 정렬하기 (0) | 2023.01.05 |
---|---|
[프로그래머스] 1단계 - [1차] 비밀지도.cpp (0) | 2023.01.05 |
[프로그래머스] 1단계 - 예산 (0) | 2023.01.05 |
[프로그래머스] 1단계 - 3진법 뒤집기 (0) | 2023.01.04 |
[프로그래머스] 1단계 - 콜라츠 추측 (0) | 2023.01.02 |