Algorithm/프로그래머스

[프로그래머스] 영어 끝말잇기 with C++

nowkoes 2023. 6. 6. 00:00

문제 설명


제한 사항 및 입출력 예제


개념

 이 문제는 끝말잇기 게임의 참가자들 중에서 규칙을 어긴 첫 번째 참가자와 그 참가자의 턴을 식별하고 출력하는 것을 목표로 한다. 여기서 주요 과제는 두 가지다.

 

  1. 각 턴에서 주어진 단어가 이전 단어의 마지막 글자로 시작하는지 판별
  2. 각 턴에서 주어진 단어가 이전에 사용된 적 있는 단어인지 확인

 

 첫 번째 규칙은 문자열의 마지막 문자와 첫 문자를 비교하는 방식으로 해결할 수 있고, 두 번째 규칙은 find() 함수를 이용하여 단어의 이력을 관리하는 데이터 구조를 검색함으로써 해결할 수 있다. 이 두 가지 체크를 통과하지 못하는 첫 번째 단어를 발견하면, 해당 단어를 말한 참가자의 번호와 차례를 리턴하게 하면 된다.


풀이

#include <string>
#include <algorithm>
#include <vector>
using namespace std;

vector<int> solution(int n, vector<string> words)
{
	vector<string> v;

	for (int i = 0; i < words.size(); ++i)
	{
		if (i > 0 && words[i - 1].back() != words[i].front())
			return { i % n + 1, i / n + 1 };

		if (find(v.begin(), v.end(), words[i]) != v.end())
			return { i % n + 1, i / n + 1 };

		v.push_back(words[i]);
	}

	return { 0, 0 };
}
반응형