728x90
반응형
영어 끝말잇기
⭐️ 코드
import java.util.HashMap;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = new int[2];
HashMap<String, Integer> hashMap = new HashMap<>();
for (int i = 0; i < words.length; i++) {
if (!hashMap.containsKey(words[i])) {
if (hashMap.size() > 0 && !(words[i].charAt(0) == words[i - 1].charAt(words[i - 1].length() - 1))) {
int who = ((i+1) % n);
int when = ((i+1) / n);
if (who > 0) {
answer[0] = who;
answer[1] = when + 1;
} else {
answer[0] = n;
answer[1] = when;
}
break;
}
hashMap.put(words[i], hashMap.getOrDefault(words[i], 0) + 1);
} else {
int who = ((i+1) % n);
int when = ((i+1) / n);
if (who > 0) {
answer[0] = who;
answer[1] = when + 1;
} else {
answer[0] = n;
answer[1] = when;
}
break;
}
}
return answer;
}
}
💡 문제 풀이
문제 풀이에서 사용한 알고리즘은 HashMap이다. 하지만 이 문제는 Mapping 할게 따로 없기 때문에 HashMap 대신 HashSet을 사용하여 중복을 제거하게 하면 된다. HashSet에 대한 자세한 내용은 아래 블로그를 참고하자.
HashSet 정리
크게 문제는 어렵지 않다. 끝맛잇기의 룰처럼 마지막 단어와 다음 첫 단어가 일치해야 하고, 같은 단어가 두 번 이상 사용될 수 없다는 형식만 지켜서 해주면 된다.
아래 코드의 who와 when 변수는 몇 번째의 사람인지, 몇 번째 순서인지 나타내기 위해 사용한다.
i를 n으로 나누려고 했는데 i = 0부터 시작하기 때문에 i에 1을 더하여 계산하였다.
if (!hashMap.containsKey(words[i])) {
if (hashMap.size() > 0 && !(words[i].charAt(0) == words[i - 1].charAt(words[i - 1].length() - 1))) {
int who = ((i+1) % n);
int when = ((i+1) / n);
if (who > 0) {
answer[0] = who;
answer[1] = when + 1;
} else {
answer[0] = n;
answer[1] = when;
}
break;
}
HashSet 또는 HashMap으로 중복 입력을 막고, 마지막 단어와 다음 첫 단어가 같지 않은 경우, 그리고 몇 번째 사람인지와 몇 번째 순서인지를 나타낼 수 있는 계산식을 구하게 된다면 문제를 다 푼 거다!!
👀 후기
어렵지 않다.
가즈아!!!!!!!!!!!!!!!!!!
728x90
반응형
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스/Programmers] 카펫 (Java - 완전탐색 - Lv2) (0) | 2023.02.03 |
---|---|
[프로그래머스/Programmers] 가장 큰 수 (Java - 정렬 - Lv2) (0) | 2023.02.01 |
[프로그래머스/Programmers] 짝지어 제거하기 (Java - Stack - Lv2) (0) | 2023.01.30 |
[프로그래머스/Programmers] 피보나치 수 (Java - Lv2) (0) | 2023.01.27 |
[프로그래머스/Programmers] 숫자의 표현 (Java - Lv2) (0) | 2023.01.26 |