#문제
https://programmers.co.kr/learn/courses/30/lessons/12981
#풀이
단어 배열을 순회하면서
1) 현재 단어가 이미 사용된 단어인지 체크한다. (중복 체크 시에는 HashSet 사용)
2) 이전 단어의 마지막 문자와 현재 문자의 첫번째 문자가 다른 지 체크한다.
이 두 조건중 하나라도 만족 한다면 탈락자가 발생한 것이므로, 탈락자의 번호와 차례를 구한다.
두 조건에 해당 되지 않는다면, 단어를 HashSet에 넣고 다음 반복을 진행한다.
#소스코드
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
int no = 0, order = 0;
HashSet<String> usedWords = new HashSet<String>();
for(int i = 0; i < words.length; i++){
if(i == 0){
// 첫 번째 단어는 조건을 체크하지 않는다
usedWords.add(words[i]);
continue;
}
if(usedWords.contains(words[i]) ||
words[i-1].charAt(words[i-1].length()-1) != words[i].charAt(0)){
// 현재 단어가 이미 사용한 단어와 같다면 탈락자 발생
// 이전 단어의 마지막 문자와 현재 단어의 첫번째 문자가 같지 않다면 탈락자 발생
int nmg = (i+1)%n;
int mok = (i+1)/n;
no = nmg == 0? n : nmg;
order = nmg == 0 ? mok : mok+1;
break;
}
usedWords.add(words[i]);
}
return new int[]{no, order};
}
}
'💡Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 배달 (Java) (0) | 2021.10.20 |
---|---|
[프로그래머스] 다리를 지나가는 트럭 (Java) (0) | 2021.10.20 |
[프로그래머스] 짝지어 제거하기 (Java) (0) | 2021.10.20 |
[프로그래머스] 124 나라의 숫자 (Java) (0) | 2021.10.18 |
[프로그래머스] 다음 큰 숫자 (Java) (0) | 2021.10.18 |