프로그래머스 - 영어 끝말 잇기[거의다 품]

Lumi·2021년 11월 23일
0

알고리즘

목록 보기
41/59
post-thumbnail
function solution(n, words) {
  let arr = [];
  for (let i = 0; i < n; i++) {
    let temp = [];
    arr.push(temp);
  }
  let idx = 0;
  words.map((a) => {
    if (idx >= n) idx = 0;
    if (arr[idx]) arr[idx].push(a);
    idx++;
  });
  let x = words[0];
  let game_stage = 0;
  let people = 0;

  let temp = [];
  let ans = [];
  for (let i = 0; i < words.length; i++) {
    if (people === n) {
      people = 0;
      game_stage++;
    }

    let str = arr[people][game_stage];
    let last = temp[temp.length - 1];

    if (last !== undefined) {
      if (last.slice(last.length - 1) !== str.slice(0, 1)) {
        ans = [people + 1, game_stage + 1];
        break;
      }
      if (str.length === 1) {
        ans = [people + 1, game_stage + 1];
        break;
      } else if (str === x) {
        ans = [people + 1, game_stage + 1];
        break;
      }
    }

    temp.push(str);
    people++;
  }
  if (ans.length === 0) {
    return [0, 0];
  } else {
    return ans;
  }
}
function solution(n, words) {
    var answer = [0, 0];
    // 이미 사용한 단어를 넣을 배열
    var usedWords = []
    // 1번 플레이어부터 시작
    usedWords.push(words[0])
    for (let i = 1; i < words.length; i++) {
        var beforeWord = words[i-1]
        var currentWord = words[i]
        // 이전단어의 맨 뒷글자와 현재단어의 맨 앞글자가 같고
        // 이전에 사용한적이 없는 단어라면
        if (beforeWord[beforeWord.length - 1] == currentWord[0]
            && usedWords.indexOf(currentWord) == -1) {
            // 계속 게임을 진행
            usedWords.push(currentWord)
        } else {
            // 그게 아니라면 몇번째 턴인지, 몇번째 플레이어 인지 계산해서 리턴해준다.
            var turn = parseInt(i / n) + 1
            var player = i % n + 1
            return answer = [player, turn]
        }
    }
    return answer;
}

일단 무작정 풀이는 해결 하엿다.

위쪽의 코드가 나의 코드이고 아래쪽의 코드가 구글링을 참고한 코드이다.

생각한 코드는 같지만 나 같은 경우에는 좀더 직관적인 것을 좋아하다보니 변수를 많이 선언해 버렷다;; ㅠㅠ

그런점에서 차이가 있고 나머지 부분은 비슷하지만

indexOf를 사용함에 따라서 오답인지 정답인지가 갈라지는 것같다.

  • 나는 중간에 중복된 값이 나온다는 생각을 안해서 그냥 맨 앞값을 비교를 하였지만
  • 지금 생각해보니 중간에 중복된 값이 나올수 있기 때문에 indexOf를 사용하는 것이 맞는듯 싶다.
  • 확실히 요즘 알고리즘을 안풀다보니 뭔가 좀 안풀리는 기분이 든다 ㅠㅠ
profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글