Level
프로그래머스 Lv2
Recruitment
Summer/Winter Coding
// 같은 글자가 k개 일 떄,
// 시간 : O(n*(1+1+1+1+1+(n-k)[has판별]+1+1)) = O(n*(n-k))
function solution(n, words) {
  const check = new Set();

  let i = 0;
  while (i < words.length) {
    let player = (i % n) + 1;
    let tern = Math.floor(i / n) + 1;

    if ((words[i - 1] || words[0][0]).slice(-1) !== words[i][0]) {
      // 뒷/앞글자가 서로 다를 떄
      return [player, tern];
    }

    if (check.has(words[i])) {
      // 이미 나온 단어일 떄
      return [player, tern];
    }

    check.add(words[i]);

    i++;
  }

  return [0, 0];
}

/*

같은 문자를 체크하기 위해 set 객체 생성
words 배열의 index를 i로 저장하고, while문을 통해 words 배열을 순회
player는 나머지를, tern은 몫을 통해 구하고,
1. 앞에 위치한 단어의 뒷글자 (words[i-1].slice(-1)과 현재 index에 위치한 words[i]의 첫글자를 비교해 다를 경우 리턴.
2. 이미 나온 단어일 경우 리턴.
1,2 조건에 해당되지 않는 단어일 경우, check에 단어를 추가하고, 다음 단어를 확인 

*/