코딩테스트/Programmers
[JAVA] 영어 끝말잇기
hxx_1
2024. 4. 23. 22:31
< 풀이 >
class Solution {
public int[] solution(int n, String[] words) {
int num=0; //번호
int turn=0; //차례
boolean wrong=false;
for(int i=1;i<words.length;i++){
char last=words[i-1].charAt(words[i-1].length()-1); //이전 문자열의 마지막 글자
//끝말잇기 잘못된 경우: 이전 문자열의 마지막 글자와 현재 문자열의 첫번째 글자가 같지 않음
if(last!=words[i].charAt(0)){
num=i%n+1;
turn=i/n+1;
break;
}
//이전에 나온적 있는지 확인
for(int j=0;j<=i-1;j++){
if(words[j].equals(words[i])){
num=i%n+1;
turn=i/n+1;
wrong=true;
break;
}
}
if(wrong) //이전에 나온적 있는 문자열이 또 나오면
break; //반복문 종료
}
int[] answer = {num,turn};
return answer;
}
}
✏️ 풀이 방법
탈락하는 경우 => ① 끝말잇기 잘못했을 때 / ② 이전에 등장했던 단어를 또 말했을 때
1. 이전 문자열의 마지막 글자를 last 변수에 저장
2. 현재 문자열의 첫번째 글자가 last와 같은지 확인
: 같지 않으면 => 끝말잇기 잘못됨, 번호와 차례를 저장 후 반복문 종료
3. 현재 문자열과 이전에 같은게 있었는지 확인
: 같은게 있었으면 => wrong의 값을 true로 변경, 번호와 차례를 저장 후 같은 문자열을 찾는 반복문 종료
4. wrong의 값이 true 일 경우 반복문 종료
✍🏻 느낀점
이 문제에서 가장 헷갈렸던 부분은 번호와 차례를 어떻게 계산해야할까? 였던 것 같다. 배열을 풀어서 생각해보니까 답을 찾을 수 있었다. 다른 사람들의 풀이를 안보고 답을 찾아내서 조금 대견하다^.^ 잊지 말아야겠다. 근데 조금 문제를 지저분하게 풀어서 이것보다 더 깔끔하게 풀 수 있는 방법이 뭐 있을지 생각해봐야겠다. 다른 사람들은 hashset? 같은거 쓰는데 나는 모르겠다 흠