[Programmers] 영어 끝말잇기(Java)

이동기·2024년 10월 3일
1

프로그래머스에서 연습중에 영어 끝말잇기라는 문제를 풀어보았습니다.

같은 LV2인 오픈채팅방의 경우 시간초과 뜨면서 맨붕이 왔었는데 이번 영어 끝말잇기 문제는 체감상 굉장히 쉬웠던 것 같습니다.(substring 기억안나서 검색해본건 비밀)

문제의 핵심은 아래와 같았습니다.
1. 이전 단어의 끝 글자와 현재 단어의 첫 글자가 일치하는지
2. 이전에 중복된 단어가 있었는지
3. 몇 번째 순번의 사람이 틀렸는지
4. 몇 번째 차례에서 틀렸는지

각각 아래와 같이 해결 하였고 전체 코드는 하단에 첨부하였습니다.
1. 이전 단어의 끝 글자와 현재 단어의 첫 글자가 일치하는지 -> substring 사용
2. 이전에 중복된 단어가 있었는지 -> HashSet 사용
3. 몇 번째 순번의 사람이 틀렸는지 -> 주어진 인원수를 이용하여 증가 및 초기화
4. 몇 번째 차례에서 틀렸는지 -> 나머지 계산 사용(%)


[코드 전체]

import java.util.*;
public class Solution {

    public int[] solution(int n, String[] words) {
        Set<String> dupCheckSet = new HashSet<>(); // 중복체크를 위한 HashSet
        int count = 1; // 차례
        int num = 1; // 번호
        String prev = String.valueOf(words[0].charAt(0)); // 첫단어는 패스하도록 세팅
        for (int i = 0; i < words.length; i++) {
            String target = words[i];
            boolean result = checkWordChain(prev, target, dupCheckSet);

            if (result) {
                if (words.length - 1 == i) { // 마지막 순번인데 통과라면 실패한 사람이 없다는 뜻
                    num = 0;
                    count = 0;
                }
                prev = target;
            } else {
                break;
            }

            if (words.length - 1 != i) {
                if (num == n) { // 번호 계산
                    num = 1;
                } else {
                    num++;
                }

                if ((i + 1) % n == 0) { // 차례 계산
                    count++;
                }
            }
        }

        return new int[]{num, count};
    }

    private static boolean checkWordChain(String prev, String now, Set<String> dupCheckSet) {
        // 중복체크
        if (dupCheckSet.contains(now)) {
            return false;
        } else {
            dupCheckSet.add(now);
        }

        // 이전단어 마지막글자와 현단어 첫글자가 다르면 false
        return prev.substring(prev.length() - 1).equals(now.substring(0, 1));
    }
}

다 만들고 보니 번호와 차례 계산은 최종 i와 n을 나누고 몫과 나머지를 이용하는게 더 깔끔한 것 같습니다.

profile
개발자가 되고 싶은 '개'발자입니다. https://github.com/lee-dong-gi

0개의 댓글