문제 설명
제한 사항 및 입출력 예제
개념
이 문제는 끝말잇기 게임의 참가자들 중에서 규칙을 어긴 첫 번째 참가자와 그 참가자의 턴을 식별하고 출력하는 것을 목표로 한다. 여기서 주요 과제는 두 가지다.
- 각 턴에서 주어진 단어가 이전 단어의 마지막 글자로 시작하는지 판별
- 각 턴에서 주어진 단어가 이전에 사용된 적 있는 단어인지 확인
첫 번째 규칙은 문자열의 마지막 문자와 첫 문자를 비교하는 방식으로 해결할 수 있고, 두 번째 규칙은 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 };
}
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 예상 대진표 with C++ (0) | 2023.06.12 |
---|---|
[프로그래머스] 구명보트 with C++ (0) | 2023.06.07 |
[프로그래머스] 짝지어 제거하기 with C++ (0) | 2023.06.05 |
[프로그래머스] 가장 큰 수 with C++ (0) | 2023.06.04 |
[프로그래머스] 피보나치 수 with C++ (0) | 2023.06.03 |