[Programmers]-영어 끝말잇기
문제
문제 설명하겠다. 끝말잇기 하면서 자기등번호와 몇라운드에 탈락하는지 반환하면 되는 문제이다. 한바퀴 돌면 한 라운드가 끝이난 것이다. n명이서 끝말잇기한다. 중복되어도 탈락이다. 말이 이어지지 않아도 탈락이다. 끝말잇기가 안정적으로 끝나면 [0,0]반환하면 된다.
코드
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = new int[2];
LinkedHashMap<String,Integer> map = new LinkedHashMap<String,Integer>();
int human = 0;
int round = 1;
String prevString = words[0].charAt(0)+"";
for(int i=0;i<words.length;i++){
String word = words[i];//현 단어
human++;
if(human > n) {
human = 1;//순서
round++;
}
if(map.containsKey(word)){//입력전 중복여부
answer[0] = human;
answer[1] = round;
break;
}
map.put(word,human);//맵에 값 넣어주기
if(prevString.charAt(prevString.length()-1) != word.charAt(0)){//말 잇기가 되는지 여부
answer[0] = human;
answer[1] = round;
break;
}
prevString = word;//전 단어로 지정
if(i==words.length-1){//탈락없이 종료 조건
human = 0;
round = 0;
}
}
return answer;
}
}
코드 설명
words 문자열 배열을 입력 받는다. 이 배열은 끝말잇기에서 말한 단어들이다. 단어들 수를 for문 돌리고 다음 단어부터 human등번호 증가한다. n명보다 등번호 커지면 round가 증가했다는 뜻이다. 중복여부를 map.containsKey()로 쉽게 구한다, 그래서 링크드 해쉬맵을 사용했다. 그리고 맵에 데이터 넣어준다. 전 단어와 잇기가 되는지 확인도 한다. 안전히 끝말잇기를 끝내면 0,0 반환한다.
요약
- 오늘 머리가 안돌아간다.
- 해쉬맵을 쓰려했는데 순서보장이 없어 링크드해쉬맵을 써주면 된다.