ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 영어 끝말잇기
    알고리즘 2021. 9. 9. 21:57

    내 풀이법

    문제해석

    • n 명이서 끝말잇기를 한다
    • 낱말을 못 잇거나 기존에 사용한 낱말을 쓰면 탈락자가 발생한다
    • [누가(n명 중에 몇번째 사람이), 몇번째 라운드]에서 탈락을 했는지 리턴
    • 만약에 탈락자가 없을 시 [0, 0] 리턴

     

    내가 생각한 풀이법

    1. 반복문을 돌며 탈락자 발생 (1. 마지막 글자를 못 잇거나 혹은 2. 단어 중복 사용) 시 반복문 중단
    2. 반복문에 사용한 i 값을 통해 [누가, 언제] 탈락했는지 값을 구함

     

    나의코드

    const solution = (n, words) => {
      let usedWords = [];
      let i;
    
      for (i = 1; i < words.length; i++) {
        let previousWord = words[i - 1];
        let presentWord = words[i];
    
        usedWords.push(previousWord);
    
        let previousWordLastLetter = [...previousWord][previousWord.length - 1];
        let presentWordFirstLetter = [...presentWord][0];
    
        if (previousWordLastLetter !== presentWordFirstLetter) {
          break;
        } else if (usedWords.includes(presentWord)) {
          break;
        }
      }
    
      if (i === words.length) {
        return [0, 0];
          
      }
      let eventCord = i + 1;
      let when = Math.ceil(eventCord / n);
      let who = eventCord - (when - 1) * n;
    
      return [who, when];
    };

     

    코드특징

    • 반복문 내에서 previousWordLastLetter과 presentWordFirstLetter의 값을 구하며 서로 비교
    • 반복문 내에서 사용한 단어들을 기록하며 중복이 있는지 확인

     

    코드성능

     

    다른사람풀이법

    function solution(n, words) {
    
        var fail_i = -1;
        for(var i = 1; i < words.length; i++){
            var val = words[i];
            // 전단계의 끝말과 현단계 첫말이 다를 경우
            if(words[i-1].substring(words[i-1].length-1) != val.substring(0, 1)) {
                fail_i = i;
                break;
            } 
            // indexOf 함수는 첫번째로 값이 맞는 인덱스만 반환하므로
            // 현재 인덱스와 맞지 않을 경우 중복된 값
            if(words.indexOf(val) != i) {
                fail_i = i;
                break;
            }
        }
    
        if(fail_i == -1) return [0,0];
    
        var no = fail_i%n + 1;
        var turn = Math.floor(fail_i/n) + 1; 
    
        return [no, turn];
    }

    코드특징

    • 나의 코드와 매우 유사
    • 다른 점
      • indexOf()의 특성을 사용하여 단어가 중복인지 확인 (이 사용법이 간단하고 가벼워 보인다!)
      • substring()을 사용하여 string내 필요한 값을 추출

    코드성능

    • 나의 코드 성능과 매우 유사하다

    오늘 배운 점

    • indexOf()의 특성을 활용하여 특정 값이 배열 내에서 중복하는지 확인할 수가 있다
    • substring()을 잘 기억해서 활용하자!

    '알고리즘' 카테고리의 다른 글

    다리를 지나는 트럭  (0) 2021.09.13
    스킬트리  (0) 2021.09.11
    구명보트  (0) 2021.09.08
    기능개발  (0) 2021.09.01
    폰켓몬 (알고리즘)  (0) 2021.08.28
Designed by Tistory.