👀 문제
https://programmers.co.kr/learn/courses/30/lessons/12981
👊 도전
1. 설계
- 문제대로 구현한다.
- 단어 중복 체크는 HashSet을 이용한다.
- words[i-1]의 마지막 문자와 words[i]의 시작 단어가 같아야 한다.
- 틀렸다면, 인덱스를 통해 누가 틀렸는지, 몇 번째 회전인지 알아낸다.
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. 설명
- 단어의 중복 체크는 HashSet을 이용한다
- 따라서 올바른 단어라면 set에 넣어 뒤에서 중복 체크를 확인할 수 있게 한다.
- 앞 단어와 끝말잇기 조건에 맞는지 확인한다
- char prev를 두어 앞 단어의 마지막 문자를 저장한다.
- 일단 0번째 시작 단어는 앞문자가 없으므로 바로 prev와 set에 넣는다.
- 1번째부터 앞 문자와 체크한다. 앞 단어의 끝 문자 prev와 나(i)의 시작 단어가 다르거나 set에 있는 단어라면 answer에 값 넣고 종료한다.
- answer[0]은 탈락자 번호이다. i%3+1을 넣으면 된다.
- answer[1]은 몇 번째 차례에서 탈락했는지이다. i/3+1이다.