티스토리 뷰

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/12981?language=java 

 

코딩테스트 연습 - 영어 끝말잇기

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

 

2. 풀이

  • 끝말잇기에 사용된 단어들을 리스트에 저장한다. 
  • 현재 순서의 단어가 리스트 내에 있지 않으면 끝말잇기 성공, 있으면 단어가 중복된 것이므로 실패한다.

 

3. 코드

import java.util.*;

class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = new int[2];

        LinkedList<String> list = new LinkedList<String>();
        char beforeEnd = words[0].charAt(words[0].length() - 1); // 이전 단어의 끝말
        list.add(words[0]);
        int cnt = 1;
        boolean isEnded = false;
        
        for(int i = 1; i < words.length; i++){
            String word = words[i];
            cnt++;
            if(beforeEnd == word.charAt(0) && !list.contains(word)){ // 끝말잇기 성공
                beforeEnd = word.charAt(word.length() - 1);
                list.add(word);
            }else{  // 끝말잇기 실패
                isEnded = true;
                break;
            }
        }
        
        if(isEnded == false) { // 탈락자가 발생하지 않는 경우
            answer[0] = 0;
            answer[1] = 0;}
        else { // 탈락자가 발생한 경우
            answer[0] = cnt % n == 0 ? n : cnt % n;
            answer[1] = (int)Math.ceil((float)cnt / n);
        }
        

        return answer;
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함