본문 바로가기

프로그래머스(Java)/Level 2

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

728x90

 

사용한 단어 추적하기:

게임에서 이미 사용된 단어를 추적하기 위해 리스트Set을 사용할 수 있습니다.

각 단어가 사용될 때마다 리스트에 추가하여 중복을 체크합니다.

 

단어 연결 규칙 확인:

각 단어의 마지막 글자와 다음 단어의 첫 글자가 일치하는지 확인해야 합니다.

이때, 전 단어의 마지막 글자와 현재 단어의 첫 글자를 비교하여 규칙이 지켜졌는지 확인합니다.

 

차례와 번호 계산:

몇 번째 사람이 규칙을 어겼는지, 몇 번째 차례인지 계산해야 합니다.

이 정보를 바탕으로 [사람 번호, 차례] 형식의 배열을 반환합니다.

이를 위해 인덱스를 플레이어 수(n)로 나눈 나머지와 몫을 활용할 수 있습니다.

 

예외 처리:

게임이 규칙에 맞게 끝난 경우, [0, 0]을 반환합니다.

모든 단어가 규칙을 지켰는지 검사한 후 적절히 반환 값을 설정합니다.

 

 


정답은 더보기 클릭

더보기
더보기
더보기
더보기
import java.util.*;

class Solution {
    public int[] solution(int n, String[] words) {
        // 사용한 단어를 저장하는 리스트
        ArrayList<String> usedWords = new ArrayList<>();
        
        // 첫 단어는 규칙에 무조건 맞기 때문에 리스트에 추가
        usedWords.add(words[0]);
        
        // 두 번째 단어부터 검사
        for (int i = 1; i < words.length; i++) {
            String word = words[i]; // 현재 단어
            
            // 사용했던 단어인지 확인
            if (usedWords.contains(word)) {
                // 현재 단어를 말한 사람의 번호와 차례를 반환
                return new int[] {i % n + 1, i / n + 1};
            }
            
            String lastWord = usedWords.get(i - 1); // 이전 단어
            
            // 이전 단어의 마지막 알파벳이 현재 단어의 첫 알파벳과 다른 경우
            if (lastWord.charAt(lastWord.length() - 1) != word.charAt(0)) {
                // 현재 단어를 말한 사람의 번호와 차례를 반환
                return new int[] {i % n + 1, i / n + 1};
            }
            
            // 현재 단어를 사용한 단어 리스트에 추가
            usedWords.add(word);
        }
        
        // 모든 단어가 규칙에 맞게 사용된 경우 [0, 0] 반환
        return new int[] {0, 0};
    }
}

 

728x90