본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 영어 끝말잇기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

영어 끝말잇기 문제

 

영단어 맨 앞과 그 전의 영단어 끝을 비교

앞과 끝이 일치하면 HashSet을 이용하여 중복을 검사

중복되지 않은 단어인 경우에 Hash에 추가 그리고 다음 단어를 검사한다.

규칙에 어긋나면 calculate() 메서드를 실행하여 정답을 출력한다.

import java.util.Arrays;
import java.util.HashSet;
class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = new int[2];
        int p = 1; // 사람 번호
        int[] nl = new int[n+1]; // nl[p]가 몇 번째 차례인지 기록
        
        HashSet<String> hash = new HashSet<>();
        hash.add(words[0]);
        
        for (int i=1; i<words.length; i++) {
            if (p == n+1) p = 1;
            nl[p]++;
            if (words[i].charAt(0) == words[i-1].charAt(words[i-1].length()-1)) {
                if (hash.contains(words[i])) {
                    calculate(p, n, nl, answer);
                    break;
                } else hash.add(words[i]);
            } else {
                calculate(p, n, nl, answer);
                break;
            }
            p++;
        }
        return answer;
    }
    
    private void calculate(int p, int n, int[] nl, int[] answer) {
        p++;
        if (p == n+1) p = 1;
        answer[0] = p;
        answer[1] = nl[p]+1;
    }
}