Skip to main content

[level 2] 영어 끝말잇기 - 12981

Intro

문제 링크

문제 설명

1부터 $n$까지 번호가 붙어있는 $n$명의 사람이 영어 끝말잇기를 하고 있습니다. 규칙은 다음과 같습니다.

  1. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다.
  2. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다.
  3. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다.
  4. 이전에 등장했던 단어는 사용할 수 없습니다.
  5. 한 글자인 단어는 인정되지 않습니다.

가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요.

제한 사항

  • 끝말잇기에 참여하는 사람의 수 $n$은 2 이상 10 이하의 자연수입니다.
  • words는 끝말잇기에 사용한 단어들이 순서대로 들어있는 배열이며, 길이는 $n$ 이상 100 이하입니다.
  • 단어의 길이는 2 이상 50 이하입니다.
  • 만약 탈락자가 생기지 않는다면, [0, 0]을 return 해주세요.

입출력 예시

nwordsresult
3["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"][3, 3]
5["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"][0, 0]
2["hello", "one", "even", "never", "now", "world", "draw"][1, 3]

입출력 예 설명

예시 1: 3번 사람이 자신의 세 번째 차례에 말한 tank는 이전에 1번 사람이 말했던 단어이므로 [3, 3]을 리턴합니다.

예시 3: 1번 사람이 자신의 세 번째 차례에 'r'로 시작하는 단어 대신 'n'으로 시작하는 now를 말했으므로 [1, 3]을 리턴합니다.


구현 코드

import java.util.*;

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

//단어 중복 체크를 위한 맵
Map<String, Integer> map = new HashMap<>();

for(int i = 0; i < words.length; i++) {
if(i != 0) {
String s1 = words[i - 1]; // 이전 단어
String s2 = words[i]; // 현재 단어

char last = s1.charAt(s1.length() - 1); // 이전 단어의 마지막 철자
char first = s2.charAt(0); // 현재 단어의 처음 철자

if(map.containsKey(s2) || last != first) { // 단어가 중복이거나 철자가 이어지지 않는 경우
answer[0] = (i % n) + 1; // 번호
answer[1] = (i / n) + 1; // 차례

return answer;
}
}

map.put(words[i], 1); // 사용한 단어 맵에 저장
}

return answer;
}
}
성능 요약
메모리: 76.6 MB, 시간: 0.08 ms

채점결과
정확성: 100.0


합계: 100.0 / 100.0