[프로그래머스] 영어 끝말잇기

이찬혁·2024년 3월 19일

알고리즘

목록 보기
20/72

프로그래머스 Lv2 - 영어 끝말잇기 문제

제한 사항에서 제시한 아래 조건에 유의하며 풀이했다.

  1. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다.
  2. 이전에 등장했던 단어는 사용할 수 없습니다.
  3. 한 글자인 단어는 인정되지 않습니다.
  4. 만약 주어진 단어들로 탈락자가 생기지 않는다면, [0, 0]을 return 해주세요.

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);
    }
}
profile
나의 개발로그

0개의 댓글