๋šœ๋ถ€๋‹ˆ์˜ Devlog

[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;
    }
}

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

๋šœ๋ถ€๋‹ˆ์˜ Devlog

๋šœ๋ถ€๋‹ˆ

ํ™œ๋™ํ•˜๊ธฐ