코딩테스트/Programmers

[JAVA] 영어 끝말잇기

hxx_1 2024. 4. 23. 22:31

< 풀이 >

class Solution {
    public int[] solution(int n, String[] words) {
        int num=0; //번호
        int turn=0; //차례
        boolean wrong=false;
        
        for(int i=1;i<words.length;i++){
            char last=words[i-1].charAt(words[i-1].length()-1); //이전 문자열의 마지막 글자 
            
            //끝말잇기 잘못된 경우: 이전 문자열의 마지막 글자와 현재 문자열의 첫번째 글자가 같지 않음
            if(last!=words[i].charAt(0)){ 
                num=i%n+1;
                turn=i/n+1;
                break;
            }
            
            //이전에 나온적 있는지 확인 
            for(int j=0;j<=i-1;j++){ 
                if(words[j].equals(words[i])){
                    num=i%n+1;
                    turn=i/n+1;
                    wrong=true;
                    
                    break;
                }
            }
            
            if(wrong) //이전에 나온적 있는 문자열이 또 나오면
                break; //반복문 종료 
        }
        
        int[] answer = {num,turn};
        return answer;
    }
}

 

✏️ 풀이 방법

 

탈락하는 경우 => ① 끝말잇기 잘못했을 때  / ② 이전에 등장했던 단어를 또 말했을 때 

 

1. 이전 문자열의 마지막 글자를 last 변수에 저장

2. 현재 문자열의 첫번째 글자가 last와 같은지 확인

    : 같지 않으면 => 끝말잇기 잘못됨, 번호와 차례를 저장 후 반복문 종료 

3. 현재 문자열과 이전에 같은게 있었는지 확인

    : 같은게 있었으면 => wrong의 값을 true로 변경, 번호와 차례를 저장 후 같은 문자열을 찾는 반복문 종료

4. wrong의 값이 true 일 경우 반복문 종료 

 

✍🏻 느낀점

 

 이 문제에서 가장 헷갈렸던 부분은 번호와 차례를 어떻게 계산해야할까? 였던 것 같다. 배열을 풀어서 생각해보니까 답을 찾을 수 있었다. 다른 사람들의 풀이를 안보고 답을 찾아내서 조금 대견하다^.^ 잊지 말아야겠다. 근데 조금 문제를 지저분하게 풀어서 이것보다 더 깔끔하게 풀 수 있는 방법이 뭐 있을지 생각해봐야겠다. 다른 사람들은 hashset? 같은거 쓰는데 나는 모르겠다 흠