제한 사항에서 제시한 아래 조건에 유의하며 풀이했다.
if 조건에 1, 2, 3번 조건을 검증하도록 했고, boolean 타입의 isSuccess 변수를 통해 무사히 끝말잇기를 완료했는지를 판별했다.
EngWordRelay.java
package com.example.Programmers.Lv2;
/**
* 프로그래머스 Lv2 - 영어 끝말잇기
*/
public class EngWordRelay {
public int[] solution(int n, String[] words) {
boolean isSuccess = true;
String beforeWord = words[0];
int failTurn = 0;
int personNum = 0;
for (int i = 1; i < words.length; i++) {
failTurn = (i / n) + 1;
personNum = (i % n) + 1;
if ((!words[i].startsWith(beforeWord.substring(beforeWord.length() - 1)))
|| (words[i].length() == 1)
|| isBeforeAppear(words, i, words[i])) {
isSuccess = false;
break;
}
beforeWord = words[i];
}
if (isSuccess) {
return new int[] { 0, 0 };
} else {
return new int[] { personNum, failTurn };
}
}
private boolean isBeforeAppear(String[] arr, int idx, String str) {
for (int i = 0; i < idx; i++) {
if (arr[i].equals(str)) {
return true;
}
}
return false;
}
}
EngWordRelayTest.java
package com.example.Programmers.Lv2;
import static org.junit.Assert.assertArrayEquals;
import org.junit.Test;
public class EngWordRelayTest {
@Test
public void testEngWordRelay() {
EngWordRelay ewr = new EngWordRelay();
String[] target1 = { "tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank" };
int[] result1 = ewr.solution(3, target1);
String[] target2 = { "hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure",
"establish", "hang", "gather", "refer", "reference", "estimate", "executive" };
int[] result2 = ewr.solution(5, target2);
String[] target3 = { "hello", "one", "even", "never", "now", "world", "draw" };
int[] result3 = ewr.solution(2, target3);
int[] expected1 = { 3, 3 };
int[] expected2 = { 0, 0 };
int[] expected3 = { 1, 3 };
assertArrayEquals(expected1, result1);
assertArrayEquals(expected2, result2);
assertArrayEquals(expected3, result3);
}
}