영어 끝말잇기

이리·2024년 12월 5일
0
post-thumbnail

문제: https://school.programmers.co.kr/learn/courses/30/lessons/12981

문제설명

  • 주어진 파라미터: int n(사람의 수), String[] words(사람들이 순서대로 말한 단어)
  • 반환값: 가장 먼저 탈락하는 사람의 번호와 그 사람이 몇번째 탈락하는지 int[]
  • 1~n번까지 사람이 1 → n → 1 순서로 영어 끝말잇기를 진행
  • 앞 사람이 말한 단어의 마지막 문자로 시작하는 단어를 말하기
  • 이전에 등장했던 단어는 사용할 수 없음
  • 한글자 단어는 인정되지 않음
  • 단어의 끝과 그 다음 단어의 첫번째 스펠링이 같은지 확인해야한다.

풀이방식

  • 기준 단어와 비교 단어를 알아야한다. → word[i], word[i-1]로 처리
  • 중복 체크를 Set에 하나씩 넣고 중복이라 안들어가는 경우 찾기
  • 첫번째 단어는 바로 들어간다. → 2번째 단어부터 체크 (끝말잇기 규칙에 맞는지, 중복이 아닌지)

코드

import java.util.*;

class Solution {
    public int[] solution(int n, String[] words) {
        int[] people = new int[n]; 
        int[] answer = new int[2];
        int len = words.length;
        Set<String> set = new HashSet<>(); // 중복 체크용 set

        for (int i = 0; i < len; i++) {
            int group = i % n; // 몇 번째 사람인지 체크
            String word1 = words[i]; // 기준 단어 

            // 첫 단어가 아니면 끝말잇기 규칙 확인
            if (i > 0) {
                String word2 = words[i - 1];
                if (word1.charAt(0) != word2.charAt(word2.length() - 1)) {
                    answer[0] = group + 1; // 몇 번째 사람
                    answer[1] = people[group] + 1; // 몇 번째 차례
                    break;
                }
            }
						
						boolean check = set.add(word1);
						
            // 중복 단어 확인
            if (!check) {
                answer[0] = group + 1; // 몇 번째 사람
                answer[1] = people[group] + 1; // 몇 번째 차례
                break;
            }

            // 확인된 차례 
            people[group]++;
        }

        return answer;
    }
}

알게된 점

  • 해당 단어와 그전 단어를 확인하는 과정에서 계속해서 ArrayIndexOutOfBoundsException 이 발생했다. ⇒ 이런 두가지 인덱스를 처리할때는 범위를 정말 신경써야할거같다.

인덱스에서 에러가 나서 한참 헤맸던거같다..! 절대 없겠지만 이 글을 읽는 여러분들은 나처럼 헤매지않길 바란다...
참 쉽쥬잉?

0개의 댓글