1. 문제
https://programmers.co.kr/learn/courses/30/lessons/64063
2. 접근방법
유니온 파인드를 활용하면 쉽게 해결 가능한 문제
기존의 유니온 파인드와는 다르게
미리 모든 값에 대해 배열을 준비하지 않고
HashMap을 이용해 들어오는 값에 대해서만 부모를 준비한다.
find 시 경로 압축을 통해 시간을 최소화 시킬 수 있다.
3. 자바 코드
import java.util.HashMap;
public class P64063호텔방배정 {
HashMap<Long, Long> parents = new HashMap<Long, Long>();
public long[] solution(long k, long[] room_number) {
long[] answer = new long[room_number.length];
for (int i = 0; i < room_number.length; i++)
answer[i] = findRoom(room_number[i]);
return answer;
}
public long findRoom(long num) {
if (parents.get(num) == null) {
parents.put(num, num + 1);
return num;
}
long parent = findRoom(parents.get(num));
parents.put(num, parent);
return parent;
}
}
4. 마치며
이게 풀릴지 안풀릴지 반신반의 하면서 풀었는데
바로 풀려서 기분이 좋았다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 84021 퍼즐 조각 채우기 ( 위클리 챌린지 3주차 ) (2) | 2021.08.19 |
---|---|
[프로그래머스] 67258 보석쇼핑 ( 2020 카카오 인턴십 ) (0) | 2021.08.17 |
[프로그래머스] 64062 징검다리건너기 ( 2019 카카오 겨울 인턴십 ) (0) | 2021.08.10 |
[프로그래머스] 81302 거리두기 확인하기 (2021 카카오 인턴십) (0) | 2021.08.05 |
[프로그래머스] 72413 합승 택시 요금 (2021 카카오 블라인드) (0) | 2021.07.29 |