본문 바로가기

문제 풀이/Programmers

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

문제 출처 - Programmers

문제는 여기

 

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

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. 리스트에 단어가 있는지 체크를 하고 있다면 사람과 차례를 각각 answer에 담아준다.

2. 사용되지 않은 단어라면 리스트에 해당 단어를 넣어주고 반복을 종료한다.

3. 이전 단어가 끝나는 문자와 현재 단어가 시작하는 문자가 일치하는지 체크해준다.

4. 3.의 결과가 일치하지 않는다면 사람과 차례를 각각 answer에 담아주고 반복을 종료한다.

5. 1. ~ 4. 의 과정을 주어진 단어들의 목록 개수만큼 반복한다.

6. 결과를 출력한다.

[접근]

1. 리스트에 단어들을 담으면서 이미 사용했는지 체크하면 되겠다고 생각하였다.

2. 이전 단어의 마지막과 시작 단어의 처음을 비교하면 되겠다고 생각하였다.

[코드]

import java.util.*;

class Solution {
    public int[] solution(int n, String[] words) {
        ArrayList<String> list = new ArrayList<>();
        int[] answer = {0, 0};
        
        for (int i = 0; i < words.length; i++) {
            // 이미 나왔던 단어
            if (list.contains(words[i])) {
                // 사람
                answer[0] = (i % n) + 1;
                // 차례
                answer[1] = (i / n) + 1;
                break;
            }
            
            // 리스트에 넣기
            list.add(words[i]);
            
            // 끝말잇기가 잘못된 경우
            if (i > 0 && words[i].charAt(0) != words[i - 1].charAt(words[i - 1].length() - 1) ) {
                // 사람
                answer[0] = (i % n) + 1;
                // 차례
                answer[1] = (i / n) + 1;
                break;
            }
        }
        return answer;
    }
}