성능 요약
- 메모리: 67.9 MB, 시간: 0.07 ms
구분
-
코딩테스트 연습 > Summer/Winter Coding(~2018)
-
구현(시뮬레이션)
Answer Code1(2023.02.05)
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = {0,0};
// 사용 단어 저장
HashSet<String> set=new HashSet<>();
// 첫 번째 단어의 마지막 문자 저장
char prev=words[0].charAt(words[0].length()-1);
// 첫 번째 단어 저장
set.add(words[0]);
// 2번째 단어부터 탐색
for(int i = 1 ; i < words.length; 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;
}
}
문제 풀이
-
단어의 중복 체크는 HashSet을 이용한다.
- 올바른 단어이면
set
에 넣어 저장한다.
- 올바른 단어이면
-
앞 단어와 끝말잇기 조건에 맞는지 확인한다.
-
char prev를 두어 앞 단어의 마지막 문자를 저장한다.
-
일단 0번째 시작 단어는 앞문자가 없으므로 바로 prev와 set에 넣는다.
-
1번째부터 앞 문자와 체크한다. 앞 단어의 끝 문자 prev와 나(i)의 시작 단어가 다르거나 set에 있는 단어라면 answer에 값 넣고 종료한다.
-
Review
-
단어의 중복체크는 HashSet을 사용하는 것을 잊지 말자.
-
조건에 맞게 하나씩 구현해나가는 습관을 가지고, 이해가 안된다면 빠르게 답안을 보고 24시간 안에 다시 풀어보자.
Thank you
- 풀이에 도움을 준 HEESOO님 감사합니다.