Algorithm/프로그래머스
[프로그래머스]Summer/Winter Coding(~2018) : 영어 끝말잇기 (level 2)(c++)
HBGB
2020. 5. 23. 01:05
https://programmers.co.kr/learn/courses/30/lessons/12981
코딩테스트 연습 - 영어 끝말잇기
3 [tank, kick, know, wheel, land, dream, mother, robot, tank] [3,3] 5 [hello, observe, effect, take, either, recognize, encourage, ensure, establish, hang, gather, refer, reference, estimate, executive] [0,0]
programmers.co.kr
#include <string>
#include <vector>
#include <iostream>
#include <set>
using namespace std;
vector<int> solution(int n, vector<string> words) {
set<string> s;
vector<int> answer(2);
// 첫번째 단어 push
s.insert(words[0]);
// 2번째 단어부터 검사
int len = words.size();
for (int i = 1; i < len; ++i)
{
// 단어가 2번 이상 등장하거나, 앞 단어의 끝 글자와 같지 않다면
if (s.find(words[i]) != s.end() || *words[i - 1].rbegin() != words[i][0])
{
answer[0] = i % n + 1;
answer[1] = i / n + 1;
return answer;
}
// 단어 push
s.insert(words[i]);
}
return answer;
}
set 대신에 map을 사용해서 카운팅 해줘도 된다.
string의 끝 글자가 필요할 땐 rbegin() 함수가 유용하다.
*words[i - 1].rbegin()