쉬운 문제였다.
조건이 복잡하지도 않고 입력이 길지도 않아 문제를 읽자마자 바로 풀이를 시작해서 20분 정도 걸려서 맞췄다.
로직은 말한 단어를 저장하는 리스트와 각 사람이 말한 횟수를 카운트하는 map을 선언하고 초기화한다.
그리고 words 배열을 순회하며 올바른 단어인지 검사하고 결과를 반환한다.
최종 코드
import java.util.*;
class Solution {
static List<String> list;
public int[] solution(int n, String[] words) {
int[] answer = new int[2];
// 단어를 저장하는 list
list = new ArrayList<>();
// 말한 횟수를 카운트하는 map
Map<Integer, Integer> map = new HashMap<>();
// map 초기화
for (int i = 1; i <= n; i++) {
map.put(i, 0);
}
// 순서를 카운트하는 변수
int order = 1;
for (int i = 0; i < words.length; i++) {
// 찻번째 단어일 경우
if(i == 0) {
list.add(words[i]);
map.put(order, map.getOrDefault(order, 0) + 1);
order++;
continue;
}
// 순서가 n보다 커지면 1로 초기화
if(order > n) {
order = 1;
}
// 올바른 단어 체크 메서드 호출
if(!check(words[i], i)) {
map.put(order, map.getOrDefault(order, 0) + 1);
answer[0] = order;
answer[1] = map.get(order);
break;
}
// 단어 list에 삽입
list.add(words[i]);
// 말한 횟수 카운트
map.put(order, map.getOrDefault(order, 0) + 1);
// 순서 증가
order++;
}
return answer;
}
// 올바른 단어인지 체크하는 메서드
static boolean check(String s, int idx) {
// 단어의 길이가 1보다 작다면
if(s.length() <= 1) {
return false;
}
// 이미 말한 단어가 있다면
if(list.contains(s)) {
return false;
}
// 이전 단어의 마지막과 현재 단어의 첫번째가 같은지 확인
char temp = list.get(idx - 1).charAt(list.get(idx - 1).length() - 1);
if(temp != s.charAt(0)) {
return false;
}
// 올바른 단어일 경우
return true;
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 - n^2 배열 자르기 (0) | 2022.09.15 |
---|---|
(Java) 프로그래머스 - 점프와 순간 이동 (0) | 2022.09.11 |
(Java) 프로그래머스 - 이진 변환 반복하기 (0) | 2022.09.08 |
(Java) 프로그래머스 - 삼각 달팽이 (0) | 2022.09.07 |
(Java) 프로그래머스 - 2개 이하로 다른 비트 (0) | 2022.09.06 |