728x90
반응형
영어 끝말잇기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
⭐️ 코드
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 정리
[JAVA] HashSet이란? & 사용법 정리
안녕하세요 최근 알고리즘을 공부하면서 자바의 다양한 클래스를 알게되고 있는데요 그 동안 개발을 하면서 많이 알고 있다고 생각했는데 끊임없이 나오네요 ㅠ HashSet 클래스에 대해서 설명해
crazykim2.tistory.com
크게 문제는 어렵지 않다. 끝맛잇기의 룰처럼 마지막 단어와 다음 첫 단어가 일치해야 하고, 같은 단어가 두 번 이상 사용될 수 없다는 형식만 지켜서 해주면 된다.
아래 코드의 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 |