먼저 문제를 요약하자면, 끝말잇기 규칙 그대로 이전에 사용한 단어의 끝부분과 제시하는 단어의 앞부분이 일치해야 하며, 중복되는 단어가 없다면 {0, 0}를 반환하지만, 규칙을 어길시 규칙 어긴 포인트를 반환하는 문제이다.
저는 이전에 쓴 단어를 사용하면 안되기 때문에 map을 이용하여 사용한 단어를 key값으로 체크하였고, 만약 사용한 단어가 나오거나 이전에 사용한 단어 끝부분과 제시하는 단어의 앞부분이 다를시 현재 인덱스와 차례를 출력, 만약 게임이 문제 없이 끝난다면 {0,0}를 출력하는식으로 코드를 작성했습니다.
#include <string>
#include <vector>
#include <iostream>
#include <map>
using namespace std;
vector<int> solution(int n, vector<string> words) {
vector<int> answer;
map<string, int> dic;
dic[words[0]]++;
for (int i = 1 ; i < words.size(); i++)
{
if((dic.find(words[i]) != dic.end()) || words[i][0] != words[i-1][words[i-1].size()-1])
{
answer.push_back(i % n + 1);
answer.push_back(i / n + 1);
return answer;
}
else
{
dic[words[i]]++;
}
}
answer.push_back(0);
answer.push_back(0);
return answer;
}