프로그래머스 영어 끝말잇기(java)

2023. 1. 19. 13:11코딩테스트/프로그래머스

문제

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

 

프로그래머스

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

programmers.co.kr

 

문제요약

1. 사람 수, 사람들이 말하는 단어들을 String 배열로 주어진다.

2. 단어가 중복되거나 앞사람이 말한 단어의 마지막 문자와 뒷사람이 말한 단어의 첫 문자가 다를 경우 탈락한 사람의 번호와 해당 사람이 몇번째 말하기에 떨어졌는지 return 해준다.

 

중복이 된다 -> Set을 활용하자

 

나의 풀이

 

class Solution {
    public int[] solution(int n, String[] words) {
        // 문제가 없을 경우를 초기화
        int[] answer = {0, 0};

        // 첫 단어를 입력해준다.
        Set<String> set = new HashSet<>();
        set.add(words[0]);

        for(int i=1; i<words.length; i++){

            // 탈락하는 경우 탈락한 사람의 번호와 해당 사람이 몇번쨰 말하기인지 반환
            if(isEliminate(set, words, i)){
                answer[0] = i % n + 1;
                answer[1] = i / n + 1;
                break;
            }
            else
                set.add(words[i]);
        }

        return answer;
    }
    
    // 탈락하는 조건
    private boolean isEliminate(Set set, String[] words, int i) {
        return (words[i - 1].charAt(words[i - 1].length()-1) != words[i].charAt(0) || set.contains(words[i])) ? true : false;
    }
}