프로그래머스_영어 끝말잇기

mingyu Lim·2023년 5월 7일

코딩테스트

목록 보기
20/32

문제

n명의 인원이 참가한 영어 끝말잇기 게임에서 진행된 words라는 문자열 배열을 받아 정상적으로 진행이 되어 있는지 확인하시오.

제한 사항

  • 참여인원(n): 2 ~ 10의 자연수
  • 진행된 히스토리(words) : 끝말잇기에 사용된 단어들의 순이며, 길이는 n ~ 100
  • 모든 단어는 소문자로 이루어져 있다.
  • 정답은 [번호, 차례] 형태로 return
  • 탈락자가 생기지 않으면 [0,0]출력

예시

nwordsresult
3["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"][3,3]
5["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure",
"establish", "hang", "gather", "refer", "reference", "estimate", "executive"]
[0,0]
2["hello", "one", "even", "never", "now", "world", "draw"][1,3]

의사 코드

  • 새로운 배열에 저장하면서 중복되어 있는지 또는 끝과 처음시작 알파벳이 맞는지 판별
  • Set을 이용하여 자료 확인, 길이, 추가 등을 쉽게 풀어나간다.
  • trigger에 끝의 알파벳을 넣어주고, 다음 언어의 시작과 똑같은지 확인한다.
  • 만일 틀렸을시에 번호와 차례를 구분할 수 있는 계산식을 이용한다.
function solution(n, words) {
    var answer = [0,0];
    let set = new Set();
    let trigger = ''
    let i = 0
    
    function ansfunc (size){
        if (size % n === 0) {
            answer[0] = n
            answer[1] = Math.ceil(size / n)
        }
        else {
            answer[0] = size % n
            answer[1] = Math.ceil(size / n)
        }
    }
    
    while(i < words.length){
        if(set.has(words[i])) {
            ansfunc(set.size+1)
            return answer
        }
        else if(i !== 0 && trigger !== words[i][0]){
            ansfunc(set.size+1)
            console.log(words[i])
            return answer
        }
        set.add(words[i])
        trigger = words[i][words[i].length-1]
        i++
    }
    
    return answer;
}

0개의 댓글