https://programmers.co.kr/learn/courses/30/lessons/12981
코딩테스트 연습 - 영어 끝말잇기
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]
programmers.co.kr

문제 파악
1번부터 N번까지 순서대로 영어로 끝말잇기를 한다.
탈락하는 조건은 2가지이다.
1. 이전에 나왔던 단어를 말하면 탈락
2. 앞사람이 말했던 단어의 끝 단어와 자신이 말하는 첫 단어가 일치하지 않으면 탈락
그리고 위 조건으로 탈락하는 사람이 없는 경우 [0,0]을 반환하면 된다.
더보기
import java.util.*;
class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = new int[2];
        HashSet<String> hs = new HashSet<>();
        
        int loop = words.length;
        
        int member = 1;
        int cycle  = 1;
        
        String prevKey = "";
        String key = "";
        
        boolean init = true;
        
        for(int idx = 0; idx<loop;idx++)
        {
            key = words[idx];
            
            if(idx>0)
            {
                prevKey = words[idx-1];
                
                char pk = prevKey.charAt(prevKey.length()-1); // 이전 단어 끝자리
                char k  = key.charAt(0);                      // 현재 단어 앞자리
                
                // 다를 경우 잘못 말한거니 탈락
                if(pk!=k)
                {
                    init = false;
                    break;
                }
            }
            // 이전에 말한 단어면 탈락
            if(hs.contains(key)){
                init = false;
                break;
            }
            else{
                hs.add(key);
            }
            
            member = member == n ? 1 : member+1;
            cycle++;
        }
        
        //탈락자가 발생하지 않으면
        if(init){
            answer[0] = 0;
            answer[1] = 0;
        }
        //탈락자 발생인 경우
        else{
            answer[0] = member;
            answer[1] = cycle % n == 0 ? cycle/n : cycle/n+1;
        }
        return answer;
    }
}
'PS' 카테고리의 다른 글
| [Programmers] LV1 - 크레인 인형뽑기 게임 (0) | 2021.07.02 | 
|---|---|
| [Programmers] LV2 - 짝지어 제거하기 (0) | 2021.06.30 | 
| [BOJ] 1141번 : 접두사 (0) | 2021.06.28 | 
| [Programmers]LV3 - 길 찾기 게임 (0) | 2021.06.27 | 
| [Programmers] LV2 - 캐시 (0) | 2021.06.27 |