Seren dev's blog
article thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/12981?language=java 

 

프로그래머스

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

programmers.co.kr

풀이

영어 끝말잇기가 끝나는 사람의 번호와 차례를 구해야 한다.

 

영어 끝말잇기가 끝나는 경우는 2가지다.

  1. 이전에 등장했던 단어를 사용할 때
  2. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말하지 않은 경우

영어 끝말잇기가 끝나는지 검사하는 메서드를 사용해 영어 끝말잇기가 끝나는 경우 그 사람의 번호와 차례를 구한다.

 

이전에 등장했던 단어를 저장하기 위해 Set<String> 형 변수 wordSet을 사용한다.

 

로직

1. 이전에 등장했던 단어를 저장하는 Set<String> 형 변수 wordSet을 선언한다.

2. number, turn을 선언하고 0으로 초기화한다. 각각 번호와 차례를 의미한다.

3. for문을 사용하여 끝말잇기에 사용한 단어들을 탐색하고, terminateGame() 메서드를 호출하여 게임이 종료되는지 검사한다. 게임이 종료되면 번호와 차례를 구하고 반복문을 탐색한다. 게임이 종료되지 않으면 wordSet에 단어를 저장한다.

4. numberturn을 원소로 가지는 배열을 리턴한다.

boolean terminateGame(int i, String[] words, Set<String> wordSet) : i번째 단어가 게임을 종료시키면 true를 리턴, 아니면 false를 리턴

private static boolean terminateGame(int i, String[] words, Set<String> wordSet) {
        if (i == 0)
            return false;
        if (wordSet.contains(words[i]))
            return true;
        if (words[i].charAt(0) != words[i-1].charAt(words[i-1].length()-1))
            return true;
        
        return false;
    }
  • i는 0이면 첫번째 단어이므로 무조건 게임이 종료되지 않는다. -> return false
  • 이전에 등장했던 단어면 게임이 종료된다. -> return true
  • 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말하지 않으면 게임이 종료된다. -> return true
  • 그 이외의 경우는 게임이 종료되지 않는다. -> return false

 

코드

import java.util.*;

class Solution {
    public int[] solution(int n, String[] words) {
        Set<String> wordSet = new HashSet<>();

        int number = 0, turn = 0; 
        for (int i = 0; i < words.length; i++) {
            if (terminateGame(i, words, wordSet)) {
                number = i % n + 1;
                turn = i / n + 1;
                break;
            }
            
            wordSet.add(words[i]);
        }

        int[] answer = {number, turn};
        return answer;
    }
    
    private static boolean terminateGame(int i, String[] words, Set<String> wordSet) {
        if (i == 0)
            return false;
        if (wordSet.contains(words[i]))
            return true;
        if (words[i].charAt(0) != words[i-1].charAt(words[i-1].length()-1))
            return true;
        
        return false;
    }
}
728x90
profile

Seren dev's blog

@Seren dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!