[JAVA/프로그래머스] Summer/Winter Coding(~2018) : 영어 끝말잇기

👀 문제

https://programmers.co.kr/learn/courses/30/lessons/12981

👊 도전

1. 설계

  1. 문제대로 구현한다.
  2. 단어 중복 체크는 HashSet을 이용한다.
  3. words[i-1]의 마지막 문자와 words[i]의 시작 단어가 같아야 한다.
  4. 틀렸다면, 인덱스를 통해 누가 틀렸는지, 몇 번째 회전인지 알아낸다.

2. 구현

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
import java.util.*;
/**
 *
 * @author HEESOO
 *
 */
class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = {0,0};
        int len=words.length;
        HashSet<String> set=new HashSet<>(); // 사용 단어 저장
        
        char prev=words[0].charAt(words[0].length()-1);
        set.add(words[0]);
        // 2번째 단어부터 탐색
        for(int i=1;i<len;i++){
            // 앞 단어의 마지막 문자로 시작하지 않거나 이미 말한 단어라면 종료
            if(prev!=words[i].charAt(0) || set.contains(words[i])){
                answer[0]=i%n+1;
                answer[1]=i/n+1;
                break;
            }
            // 아니라면, 다음 체크를 위해 prev, set 설정
            prev=words[i].charAt(words[i].length()-1);
            set.add(words[i]);
        }
        return answer;
    }
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. 단어의 중복 체크는 HashSet을 이용한다
    • 따라서 올바른 단어라면 set에 넣어 뒤에서 중복 체크를 확인할 수 있게 한다.
  2. 앞 단어와 끝말잇기 조건에 맞는지 확인한다
    • char prev를 두어 앞 단어의 마지막 문자를 저장한다.
    • 일단 0번째 시작 단어는 앞문자가 없으므로 바로 prev와 set에 넣는다.
    • 1번째부터 앞 문자와 체크한다. 앞 단어의 끝 문자 prev와 나(i)의 시작 단어가 다르거나 set에 있는 단어라면 answer에 값 넣고 종료한다.
    • answer[0]은 탈락자 번호이다. i%3+1을 넣으면 된다.
    • answer[1]은 몇 번째 차례에서 탈락했는지이다. i/3+1이다.

👏 해결 완료!