티스토리 뷰
간단한 문자열 문제이다.
이전에 등장한 단어를 부르거나, 마지막 영단어와 끝말잇기가 되지 않는 순간을 찾아야 한다. 몫과 나머지 연산으로 몇번째 사람의 몇번째 순서인지 간단하게 구할 수 있고, 현재까지 언급된 단어는 set을 통해 간단히 관리할 수 있다. 따라서 시간복잡도 O(NlogN)내에 문제를 해결해낼 수 있다.
import java.util.*;
class Solution {
private Set<String> st = new HashSet<String>();
private List<String> list = new ArrayList<>();
public int[] solution(int n, String[] words) {
int[] answer = {0, 0};
for(int i=0; i<words.length; i++) {
String word = words[i];
System.out.println(word);
if (st.contains(word) || isNotMatch(word)) {
answer[0] = i%n + 1;
answer[1] = i/n + 1;
break;
}
else st.add(word);
list.add(word);
}
return answer;
}
private boolean isNotMatch(String word) {
if (list.isEmpty()) return false;
String end = list.get(list.size()-1);
if (end.charAt(end.length()-1) == word.charAt(0)) return false;
return true;
}
}
'PS > Programmers' 카테고리의 다른 글
[Programmers] Level 2 :: 시소 짝꿍 C++ 풀이 (0) | 2023.01.25 |
---|---|
[Programmers] Level 2 : 점프와 순간 이동 (0) | 2022.12.12 |
[Programmers] Level 2 : 베스트앨범 (0) | 2022.12.08 |
[Programmers] Level 2 : 게임 맵 최단거리 (0) | 2022.12.08 |
[Programmers] Level 2 : 모음사전 (0) | 2022.12.08 |