devFancy BE Developer

[Programmers] 12981. 영어 끝말잇기

2023-02-05
devfancy

문제 링크

성능 요약

  • 메모리: 67.9 MB, 시간: 0.07 ms

구분

  • 코딩테스트 연습 > Summer/Winter Coding(~2018)

  • 구현(시뮬레이션)

Answer Code1(2023.02.05)

import java.util.*;

class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = {0,0};

        // 사용 단어 저장
        HashSet<String> set=new HashSet<>();

        // 첫 번째 단어의 마지막 문자 저장 
        char prev=words[0].charAt(words[0].length()-1);

        // 첫 번째 단어 저장
        set.add(words[0]);

        // 2번째 단어부터 탐색
        for(int i = 1 ; i < words.length; i++){

            // 앞 단어의 마지막 문자로 시작하지 않거나 이미 말한 단어라면 종료
            if(prev != words[i].charAt(0) || set.contains(words[i])){
                //  탈락자 번호
                answer[0]= i % n + 1;

                // 몇 번째 차례에서 탈락했는지에 대한 갯수
                answer[1]= i / n + 1;
                break;
            }
            // 아니라면, 다음 체크를 위해 prev, set 설정
            prev = words[i].charAt(words[i].length()-1);
            set.add(words[i]);
        }
        return answer;
    }
}

문제 풀이

  1. 단어의 중복 체크는 HashSet을 이용한다.

    • 올바른 단어이면 set에 넣어 저장한다.
  2. 앞 단어와 끝말잇기 조건에 맞는지 확인한다.

    • char prev를 두어 앞 단어의 마지막 문자를 저장한다.

    • 일단 0번째 시작 단어는 앞문자가 없으므로 바로 prev와 set에 넣는다.

    • 1번째부터 앞 문자와 체크한다. 앞 단어의 끝 문자 prev와 나(i)의 시작 단어가 다르거나 set에 있는 단어라면 answer에 값 넣고 종료한다.

Review

  • 단어의 중복체크는 HashSet을 사용하는 것을 잊지 말자.

  • 조건에 맞게 하나씩 구현해나가는 습관을 가지고, 이해가 안된다면 빠르게 답안을 보고 24시간 안에 다시 풀어보자.

Thank you

  • 풀이에 도움을 준 HEESOO님 감사합니다.

Comments

Index