프로그래머스 영어 끝말잇기 (Java, 자바)

jonghyukLee·2023년 6월 25일
0

이번에 풀어본 문제는
프로그래머스 영어 끝말잇기 입니다.

📕 문제 링크

❗️코드

import java.util.*;

class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = new int[2];
        
        Set<String> set = new HashSet<>();
        int wordLength = words.length;
        int[] turnCount = new int[n + 1];
        char charBefore = words[0].charAt(0);
        for (int i = 0; i < wordLength; i++) {
            int turn = ((i + 1) % n); // 현재 순서 번호
            turn = turn == 0 ? n : turn;
            turnCount[turn]++;
            
            String word = words[i];
            
            if (!set.add(word) || word.charAt(0) != charBefore) {
                answer[0] = turn;
                answer[1] = turnCount[turn];
                break;
            }
            charBefore = word.charAt(word.length() - 1);
        }
    
        return answer;
    }
}

📝 풀이

끝말잇기에 참여한 인원 n, 끝말잇기에 등장한 단어가 담겨있는 배열 words가 주어집니다.
익히 알고있는대로, 이전 단어의 끝 글자와 외친 단어의 첫 글자가 일치하지 않으면 탈락이고, 중복 단어를 말해도 탈락인 조건입니다.
우선 첫 조건은 이전 단어의 끝 글자를 다음 반복에 활용할 수 있도록 charBefore이라는 변수를 선언해서 활용했습니다.
다음으로, 두 번째 조건의 경우 Set을 활용하면 간단하게 해결할 수 있을 것이라 생각했습니다.
HashSet의 add() 메서드를 참고해 보시면, add할 값이 이미 존재하면 false를 반환해줍니다.
이를 활용하여 등장한 단어를 모두 HashSet에 add 해주고, false가 반환될 시 중복 단어로 간주하여 해당 시점의 순서와 누적된 turnCount를 담아주면 해결할 수 있습니다.

profile
머무르지 않기!

0개의 댓글