본문 바로가기
코딩테스트/프로그래머스

Level2 - 영어 끝말잇기

by 고구마는호박고구마 2023. 6. 2.

n - 참가자 인원

words - 끝말있기 게임 진행

 

규칙

1. 바로 앞에 말한 단어의 끝자랑 내가 말한 단어의 첫자가 다르면 땡

2. 앞에 이미 말한 단어가 있으면 땡

 

입출력 예 #1

 

3명의 사람이 끝말잇기에 참여하고 있습니다.
1번 사람 : tank, wheel, mother
2번 사람 : kick, land, robot
3번 사람 : know, dream, tank
와 같은 순서로 말을 하게 되며, 3번 사람이 자신의 세 번째 차례에 말한 tank라는 단어가 1번 사람이 자신의 첫 번째 차례에 말한 tank와 같으므로 3번 사람이 자신의 세 번째 차례로 말을 할 때 처음 탈락자가 나오게 됩니다.

 

 

해결해야 될 규칙

1. 내가 말한 단어가 뒤의 단어의 끝자랑 같은지

2. 내가 말한 단어가 이미 나온 단어는 아닌지

3. 땡이면 나는 몇번이고

4. 땡이면 나는 몇번째 턴에 탈락했는지

 

class Solution {
    public int[] solution(int n, String[] words) {
        ArrayList<String> str = new ArrayList<>();
        int[] answer = {0,0};
        str.add(words[0]);
        for(int i=1; i<words.length; i++){
            char a  = str.get(i-1).charAt(str.get(i-1).length()-1);
            //1. 내가 말한 단어가 뒤의 단어의 끝자랑 같은지
            //2. 내가 말한 단어가 이미 나온 단어는 아닌지
            if(a != words[i].charAt(0) || str.contains(words[i])){
                //땡인 경우
                //3. 3명의 경우 1 2 3 1 2 3순으로 돌게되서 %로 처리
                answer[0]= ((i+1)%n == 0)? n : (i+1)%n;
                //4. 1 2 3 - 1턴 4 5 6 - 2턴 7 8 9 - 3턴 명수와 나눠서 올림
                answer[1] = (int)Math.ceil((i+1)*1.0/n);
                // 1.0을 곱해준 이유는 정수/정수 나누면 무조건 내림되서 처리 되기때문
                // 소수 / 정수 하면 소수로 출력이 된다.
                return answer;
            }
            str.add(words[i]);
        }
        return answer;
    }
}

댓글