🙈

⃝ 동글동글 ⃝

🪐ᐩ˖ 🍎

CodingTest/Programmers

[프로그래머스/Programmers] 영어 끝말잇기 (Java - HashSet - Lv2)

JONG_UK 2023. 1. 31. 19:30
728x90
반응형
SMALL

영어 끝말잇기
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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
반응형
LIST