이번에 풀어본 문제는
프로그래머스 영어 끝말잇기 입니다.
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = new int[2];
Set<String> set = new HashSet<>();
int wordLength = words.length;
int[] turnCount = new int[n + 1];
char charBefore = words[0].charAt(0);
for (int i = 0; i < wordLength; i++) {
int turn = ((i + 1) % n); // 현재 순서 번호
turn = turn == 0 ? n : turn;
turnCount[turn]++;
String word = words[i];
if (!set.add(word) || word.charAt(0) != charBefore) {
answer[0] = turn;
answer[1] = turnCount[turn];
break;
}
charBefore = word.charAt(word.length() - 1);
}
return answer;
}
}
끝말잇기에 참여한 인원 n, 끝말잇기에 등장한 단어가 담겨있는 배열 words가 주어집니다.
익히 알고있는대로, 이전 단어의 끝 글자와 외친 단어의 첫 글자가 일치하지 않으면 탈락이고, 중복 단어를 말해도 탈락인 조건입니다.
우선 첫 조건은 이전 단어의 끝 글자를 다음 반복에 활용할 수 있도록 charBefore이라는 변수를 선언해서 활용했습니다.
다음으로, 두 번째 조건의 경우 Set을 활용하면 간단하게 해결할 수 있을 것이라 생각했습니다.
HashSet의 add() 메서드를 참고해 보시면, add할 값이 이미 존재하면 false를 반환해줍니다.
이를 활용하여 등장한 단어를 모두 HashSet에 add 해주고, false가 반환될 시 중복 단어로 간주하여 해당 시점의 순서와 누적된 turnCount를 담아주면 해결할 수 있습니다.