-
내 풀이법
문제해석
- n 명이서 끝말잇기를 한다
- 낱말을 못 잇거나 기존에 사용한 낱말을 쓰면 탈락자가 발생한다
- [누가(n명 중에 몇번째 사람이), 몇번째 라운드]에서 탈락을 했는지 리턴
- 만약에 탈락자가 없을 시 [0, 0] 리턴
내가 생각한 풀이법
- 반복문을 돌며 탈락자 발생 (1. 마지막 글자를 못 잇거나 혹은 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