PS/Programmers
[Programmers] Level 2 : 영어 끝말잇기
뱃싸공
2022. 12. 12. 15:29
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
간단한 문자열 문제이다.
이전에 등장한 단어를 부르거나, 마지막 영단어와 끝말잇기가 되지 않는 순간을 찾아야 한다. 몫과 나머지 연산으로 몇번째 사람의 몇번째 순서인지 간단하게 구할 수 있고, 현재까지 언급된 단어는 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;
}
}