[Programmers] ํธํ ๋ฐฉ ๋ฐฐ์ (Java)
by ๋๋ถ๋https://programmers.co.kr/learn/courses/30/lessons/64063
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ํธํ ๋ฐฉ ๋ฐฐ์
programmers.co.kr
ํธํ ์๋ ๋ฐฉ์ด ์ด k๊ฐ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ๋ฐฉ์ 1๋ฒ๋ถํฐ k๋ฒ๊น์ง ๋ฒํธ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
๋ฐฐ์ ๊ท์น
1. ํ ๋ฒ์ ํ ๋ช ์ฉ ์ ์ฒญํ ์์๋๋ก ๋ฐฐ์ ๋ฉ๋๋ค.
2. ๊ณ ๊ฐ์ ํฌ์ํ๊ธฐ ์ํ๋ ๋ฐฉ ๋ฒํธ๋ฅผ ์ ์ถํฉ๋๋ค.
3. ๊ณ ๊ฐ์ด ์ํ๋ ๋ฐฉ์ด ๋น์ด์๋ฐ๋ฉด ์ฆ์ ๋ฐฐ์ ํฉ๋๋ค.
4. ๊ณ ๊ฐ์ด ์ํ๋ ๋ฐฉ์ด ๋ฐฐ์ ๋์ด ์์ผ๋ฉด ์ํ๋ ๋ฐฉ๋ณด๋ค ๋ฒํธ๊ฐ ํฌ๋ฉด์ ๋น์ด์๋ ๋ฐฉ ์ค ๊ฐ์ฅ ๋ฒํธ๊ฐ ์์ ๋ฐฉ์ ๋ฐฐ์ ํฉ๋๋ค.
๋ฌธ์ ํ์ด
ํด๋น ๋ฌธ์ ๋ Union-Find๋ฅผ ํ์ฉํ์ฌ ํ์ด์ผ ํฉ๋๋ค.
Union-Find๋ ์ฌ๋ฌ ๋ ธ๋๊ฐ ์กด์ฌํ ๋, ๋ ๊ฐ์ ๋ ธ๋๋ฅผ ์ ํํด์ ํ์ฌ ๋ ๋ ธ๋๊ฐ ์๋ก ๊ฐ์ ๊ทธ๋ํ์ ์ํ๋์ง ํ๋ณํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
ํธ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์์ ๋น๋์นญ์ผ ๋, Union-Find๋ฅผ ํตํด ๋ถ๋ชจ๋ ธ๋๊น์ง์ ๊ฒฝ๋ก๋ฅผ ์์ถ์ํฌ ์ ์์ต๋๋ค.
์ด ๋ฐฉ๋ฒ์ ์ด์ฉํด ์์ฒญํ ๋ฐฉ์ด ๋น์ด์์ง ์์ ๊ฒฝ์ฐ์ ์๋ดํ ๋ฐฉ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋๋ก ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ณ ๊ฐ๋ค์ด ์ํ๋ ๋ฐฉ ๋ฒํธ๊ฐ ์์๋๋ก [1, 3, 4, 3] ์ผ ๋ ์ฒ์ ๊ณ ๊ฐ์ ๋ณธ์ธ์ด ์ํ๋ ๋ฐฉ์ธ 1๋ฒ ๋ฐฉ์ ์ป์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ๋ค์ ๊ณ ๊ฐ์ 1๋ฒ ๋ฐฉ์ด ์๋ ๋น์ด์๋ ๊ฐ์ฅ ์์ ๋ฒํธ์ธ 2๋ฒ ๋ฐฉ์ ์๋ด๋ฅผ ๋ฐ์์ผ ํฉ๋๋ค.
๊ทธ ๋ค์ ๊ณ ๊ฐ์ด 3๋ฒ ๋ฐฉ์ ์์ฒญํ๋ฉด ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ค์์ ๋ฐฐ์ ํด์ค ๋ฐฉ์ 4๋ฒ์ผ๋ก ์ง์ ํด๋ก๋๋ค.
๋ง์ฝ, ๊ทธ ์ ์ 4๋ฒ ๋ฐฉ์ ์์ฒญํ ๊ณ ๊ฐ์ด ์์ด 4๋ฒ ๋ฐฉ์ด ๋ฐฐ์ ๋๋ฉด, ์ดํ 3๋ฒ ๋ฐฉ์ ์์ฒญํ ๊ณ ๊ฐ์ ์๋์ ๊ฐ์ ๋ฐฉ์์ ํตํด 5๋ฒ ๋ฐฉ์ ๋ฐฐ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
๊ณ ๊ฐ๋ค์ด ์ํ๋ ๋ฐฉ ๋ฒํธ๊ฐ ์์๋๋ก [1, 3, 2, 2] ๋ผ๋ฉด ์ฒ์ ์ธ ๊ณ ๊ฐ์ ์์๋๋ก 1๋ฒ, 3๋ฒ, 2๋ฒ ๋ฐฉ์ ๋ฐฐ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
์ดํ 2๋ฒ ๋ฐฉ์ ๋ฐฐ์ ๋ฐ์ ๊ณ ๊ฐ์ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก 4๋ฒ ๋ฐฉ์ ๋ฐฐ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
import java.util.Arrays;
import java.util.HashMap;
class Solution {
static HashMap<Long, Long> roomInfo = new HashMap<>();
public long findEmptyRoom(long wantRoom) {
if (!roomInfo.containsKey(wantRoom)) { // ์์ฒญํ ๋ฐฉ์ด ๋น์ด์์
roomInfo.put(wantRoom, wantRoom + 1); // ๋ค์ ๋ฐฉ ์ฐ๊ฒฐ
return wantRoom;
}
long next_room = roomInfo.get(wantRoom);
long empty_room = findEmptyRoom(next_room);
roomInfo.put(wantRoom, empty_room);
return empty_room;
}
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] = findEmptyRoom(room_number[i]);
}
return answer;
}
}
'Algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ํํ (Java) (0) | 2022.09.03 |
---|---|
[Programmers] n์ง์ ๊ฒ์ (Java) (0) | 2021.06.26 |
[Programmers] ์ฌ ์ฐ๊ฒฐํ๊ธฐ (Java) (0) | 2021.06.10 |
[Programmers] ํ์ผ๋ช ์ ๋ ฌ (Java) (0) | 2021.05.05 |
[Programmers] ๊ตฌ๋ช ๋ณดํธ (Java) (0) | 2021.05.01 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
๋๋ถ๋์ Devlog
๋๋ถ๋