


나의 풀이
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
HashMap<String, Integer> map = new HashMap<>();
int player = 0;
int turn = 0;
for (int i = 0; i < words.length; i++) {
if (i > 0 && words[i-1].charAt(words[i-1].length() - 1) != words[i].charAt(0)) { // 1
player = (i % n) + 1;
turn = (i / n) + 1;
return new int[]{player, turn};
}
if (map.containsKey(words[i])) { // 2
player = (i % n) + 1;
turn = (i / n) + 1;
return new int[]{player, turn};
}
map.put(words[i], i); // 3
}
return new int[]{0, 0}; // 4
}
}
과정
- 두번째 words부터 앞의 words의 마지막 글자와 현재 words의 첫 글자가 같지 않으면 i를 n으로 나눈 나머지와 몫에 1을 더해서 반환
- i번째 words가 map에 있다면 i를 n으로 나눈 나머지와 몫에 1을 더해서 반환
- 두 조건 모두 해당되지 않으면 map에 삽입
- for문에서 반환되지 않았다면 0, 0 리턴
다른 사람 풀이
import java.util.HashSet;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = { 0, 0 };
char chEnd = words[0].charAt(words[0].length() - 1);
char chStart;
System.out.print(chEnd + " ");
HashSet<String> log = new HashSet<>();
log.add(words[0]);
for (int i = 1; i < words.length; i++) {
chStart = words[i].charAt(0);
log.add(words[i]);
if (chEnd != chStart || log.size() != i + 1) {
System.out.print(i + 1 + "!");
answer[0] = (i % n)+1;
answer[1] = (i / n) + 1;
break;
}
chEnd = words[i].charAt(words[i].length() - 1);
System.out.print(chEnd + " ");
}
System.out.println();
System.out.println("(" + answer[0] + ", " + answer[1] + ")");
return answer;
}
}