[210308][백준/BOJ] 9093번 단어 뒤집기

KeonWoo Kim·2021년 3월 8일
0

알고리즘

목록 보기
17/84

문제

입출력


풀이

단어 하나 하나를 거꾸로 출력하는 문제이다.

각 공백들의 위치를 beg, end 변수에 넣은후에 단어들을 거꾸로 출력하면 된다.
beg의 처음 값에는 0이, end의 처음 값는 첫번째 공백 위치가 들어간다.
다음 beg 값에는 end값이, 다음 end 값에는 두번째 공백 위치가 들어간다.
이러한 방식으로 공백사이의 단어들을 찾을 수 있다.

코드

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n, len;

	scanf("%d", &n);
	cin.ignore(); 
	for(int i = 0 ; i < n ; ++i)
	{
		string str;
		int beg = 0, end = 0;

		getline(cin, str);

		for (int j = 0; j <= str.size(); ++j)
		{
			if (str[j] == ' ' || str[j]=='\0')
			{
				end = j;

				for (int k = end - 1; k >= beg; --k)
				{
					if(str[k]!=' ')
						printf("%c", str[k]);
				}
				printf(" ");
				beg = j;
			}
		}
		printf("\n");
	}
}

느낀점

getline을 통해 입력을 받으면 버퍼에 입력값이 남아있게 된다는 것을 알게 되었다.
처음 입력받은 문자열보다 뒤에 입력받는 문자열의 길이가 길면 정상적으로 출력은 되지만
반대의 경우에는 버퍼에 남아있는 문자열이 존재해서 결과값이 잘못 출력된다.

이를 해결하기 위해서는 cin.ignore()을 통해 버퍼를 비워주면 된다.
cin.ignore() 대신에 getchar()을 사용해도 된다.

getline()은 string 문자열에만 사용 가능하고, char 문자열에 사용하기 위해서는 cin.getline()을 사용하면 된다.

profile
안녕하세요

0개의 댓글

관련 채용 정보