백준 11094 - 꿍 가라사대

less than 1 minute read

문제링크

문제 접근

  • 먼저, 공백을 포함한 문자열을 통째로 입력 받는다.
  • stringstream 을 이용해서 공백 문자를 기준으로 처음 두 단어를 파싱한다.
  • 파싱한 두 단어가 각각 “Simon”, “says” 이면 나머지 단어들을 출력한다.

의사코드(pseudo-code)

- 줄 개수 입력, n
- for i=0 to n-1:
	- 문자열 입력, str
	- 공백을 기준으로 앞에 두개를 파싱한다, stringstream 사용
	- if first_token == "Simon" && second_token == "says":
		- stringstream 에 남아있는 문자들 출력


소스코드 및 분석

전체 코드

#include <iostream>
#include <sstream>
#include <string>

int main()
{
	int n = 0;
	std::cin >> n;
	std::getchar();
	for (int i = 0; i < n; i++) {
		std::string str;
		std::getline(std::cin, str);
		std::stringstream ss(str);
		std::string first_token, second_token;
		ss >> first_token;
		ss >> second_token;
		
		if (first_token == "Simon" && second_token == "says") {
			std::string token;
			while (ss >> token)
				std::cout << " " << token;
			std::cout << "\n";
		}
	}
}

  • 입력 연산자 “»” 는 공백문자를 버퍼에 남겨두기 때문에 first_token, second_token 에 각각 파싱해서 저장하고 “Simon” 과 “says”로 시작하는지 판단한다.
  • 조건에 맞는다면 stringstream 에 남아있는 단어들을 출력한다.

Leave a comment