먼저 코드를 이렇게 짰다.
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = {0, 0};
int idx = 0;
Set<String> set = new HashSet<>();
for (int i = 0; i < words.length; i++) {
if (!set.add(words[i])) { // set에 추가할 수 없다면 중복된 단어이므로
idx = i; // 해당 인덱스를 반환
}
if(i >= 1){
if(words[i-1].charAt(words[i-1].length()-1) != words[i].charAt(0)){
idx = i;
}
}
if (idx != 0) {
if ((idx+1) % n == 0) {
answer[0] = n;
} else {
answer[0] = (idx+1) % n;
}
if((idx+1) % n != 0){
answer[1] = (idx+1)/n+1;
}else{
answer[1] = (idx+1)/n;
}
}
}
return answer;
}
}
이 코드로 테스트를 돌려보니 정확도 테스트에서 30점이 나왔다.. 뭐가 문제인가 보고
다시 고쳐봤다.
이전 코드에서 나는 idx를 구하는 조건두개를 한번에 잡지않고 따로 잡으려고 했던게 일단 문제였다.
idx를 구하는 조건 1. 중복되면 그 인덱스가 idx 가 된다. 2. 앞단어의 마지막 글자와 현재 단어의 첫글자가 다르면 인덱스가 idx가 된다.
answer에 0과 1위치에 넣는 기준도 잘못생각했다. 0위치에는 탈락한 사람의 번호가 들어가야하므로 탈락한 위치인 idx 에 나머지연산 n을 한 값에 1을 더해주면 탈락한 사람의 번호가 되고, 1위치에는 탈락한 차례가 들어가야하니 idx 몫연산 n 한 값에 1을 더해주면 된다.
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = {0, 0};
int idx = 0;
Set<String> set = new HashSet<>();
for (int i = 0; i < words.length; i++) {
// 탈락 조건 확인
if (!set.add(words[i]) || (i > 0 && words[i-1].charAt(words[i-1].length()-1) != words[i].charAt(0))) {
idx = i;
break;
}
}
if (idx != 0) {
answer[0] = (idx % n) + 1; // 탈락한 사람의 번호
answer[1] = (idx / n) + 1; // 탈락한 차례
}
return answer;
}
}
조건이 여러개일때, 두 조건다 만족하거나, 한조건이라도 만족할때 멈춰야한다면 조건문 하나로 다 해결을 하는게 훨씬 짧고 보기도 편하기 때문에 앞으로 이렇게 작성을 해야겠다 맘먹었다.