문제 푼 날짜 : 2021-08-13
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12981
주어진 조건을 체크해주면서 완전탐색을 이용하면 쉽게 풀 수 있는 문제였다.
좀 더 쉽고 깔끔하게 구현할 수 있을 것 같았지만, 아래와 같이 생각나는 대로 알고리즘을 구현해주었다.
- 직전에 나온 단어의 마지막 알파벳(코드 내의 last)과 현재 단어의 첫번째 알파벳을 비교해준다.
- 단어가 이전에 나왔는지 체크해주기 위해 vector(코드 내의 check)에 단어들을 넣어준다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(int n, vector<string> words) {
vector<int> answer{ {}, {} };
char last = words[0].back();
vector<string> check{words[0]};
for (int i = 1; i < words.size(); i++) {
if (words[i].front() != last || find(check.begin(), check.end(), words[i]) != check.end()) {
answer[0] = (i % n) + 1;
answer[1] = (i / n) + 1;
break;
}
last = words[i].back();
check.push_back(words[i]);
}
return answer;
}
생각을 좀 더 깔끔하게 구현하는 연습을 해야할 것 같다.