링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12981
set을 이용하여 중복을 확인했다.
check 함수를 사용해 vector에 넣을 번호와 차례를 계산해주었다.
•string의 front()와 back()을 사용하면 맨 앞글자와 맨 뒷글자 접근이 가능하다.
•check 함수를 쓰지 않아도 i를 가지고 쉽게 계산할 수 있다.
-> 이를 바탕으로 코드를 간결하게 만들어 보았다. (53줄 -> 19줄)
#include <string>
#include <vector>
#include <iostream>
#include <set>
#include <cmath>
using namespace std;
vector<int> answer;
void check(int i, int n){
int m = i % n;
if(m == 0) m = n;
int q = ceil((double)i/(double)n);
answer.push_back(m);
answer.push_back(q);
}
vector<int> solution(int n, vector<string> words) {
set<string> s;
s.insert(words[0]);
for(int i = 1; i < words.size(); i++){
string before = words[i-1];
string now = words[i];
if(before[before.size()-1] != now[0]){
check(i+1, n);
break;
}
else{
if(s.find(words[i]) == s.end()){
s.insert(words[i]);
}
else{
check(i+1, n);
break;
}
}
}
if(answer.size() == 0){
answer.push_back(0);
answer.push_back(0);
}
return answer;
}
** 더 간결한 풀이
#include <string>
#include <vector>
#include <iostream>
#include <set>
using namespace std;
vector<int> solution(int n, vector<string> words) {
set<string> s;
s.insert(words[0]);
for(int i = 1; i < words.size(); i++){
if(s.find(words[i]) != s.end() || words[i-1].back() != words[i].front())
return{(i%n) + 1, (i/n) + 1};
s.insert(words[i]);
}
return {0,0};
}