๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm

๐Ÿจ ์นด์นด์˜ค 2019 ๊ฒจ์šธ ์ธํ„ด์‹ญ: ํ˜ธํ…” ๋ฐฉ ๋ฐฐ์ •(Lv4)

๐Ÿ“Œ ๋ฌธ์ œ

์Šค๋…ธ์šฐํƒ€์šด์—์„œ ํ˜ธํ…”์„ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š” ์Šค์นดํ”ผ๋Š” ํ˜ธํ…”์— ํˆฌ์ˆ™ํ•˜๋ ค๋Š” ๊ณ ๊ฐ๋“ค์—๊ฒŒ ๋ฐฉ์„ ๋ฐฐ์ •ํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธํ…”์—๋Š” ๋ฐฉ์ด ์ด k๊ฐœ ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์˜ ๋ฐฉ์€ 1๋ฒˆ๋ถ€ํ„ฐ k๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋ชจ๋“  ๋ฐฉ์ด ๋น„์–ด ์žˆ์œผ๋ฉฐ ์Šค์นดํ”ผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ณ ๊ฐ์—๊ฒŒ ๋ฐฉ์„ ๋ฐฐ์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ•œ ๋ฒˆ์— ํ•œ ๋ช…์”ฉ ์‹ ์ฒญํ•œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ์„ ๋ฐฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ณ ๊ฐ์€ ํˆฌ์ˆ™ํ•˜๊ธฐ ์›ํ•˜๋Š” ๋ฐฉ ๋ฒˆํ˜ธ๋ฅผ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ณ ๊ฐ์ด ์›ํ•˜๋Š” ๋ฐฉ์ด ๋น„์–ด ์žˆ๋‹ค๋ฉด ์ฆ‰์‹œ ๋ฐฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ณ ๊ฐ์ด ์›ํ•˜๋Š” ๋ฐฉ์ด ์ด๋ฏธ ๋ฐฐ์ •๋˜์–ด ์žˆ์œผ๋ฉด ์›ํ•˜๋Š” ๋ฐฉ๋ณด๋‹ค ๋ฒˆํ˜ธ๊ฐ€ ํฌ๋ฉด์„œ ๋น„์–ด์žˆ๋Š” ๋ฐฉ ์ค‘ ๊ฐ€์žฅ ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๋ฐฉ์„ ๋ฐฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ „์ฒด ๋ฐฉ ๊ฐœ์ˆ˜ k์™€ ๊ณ ๊ฐ๋“ค์ด ์›ํ•˜๋Š” ๋ฐฉ ๋ฒˆํ˜ธ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด์žˆ๋Š” ๋ฐฐ์—ด room_number๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ ๊ณ ๊ฐ์—๊ฒŒ ๋ฐฐ์ •๋˜๋Š” ๋ฐฉ ๋ฒˆํ˜ธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

๐Ÿ“Œ ์ œํ•œ์‚ฌํ•ญ

  • k๋Š” 1 ์ด์ƒ 1012 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • room_number ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 1 ์ด์ƒ 200,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • room_number ๋ฐฐ์—ด ๊ฐ ์›์†Œ๋“ค์˜ ๊ฐ’์€ 1 ์ด์ƒ k ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ ํ’€์ด

์‹œ๋ฎฌ๋ ˆ์ด์…˜์œผ๋กœ ํ’€์—ˆ๋”๋‹ˆ ๊ธˆ๋ฐฉ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ k์˜ ๋ฒ”์œ„๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ์—์„œ ์ „๋ถ€ ์‹คํŒจํ–ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  1. ๋ฐฐ์ •๋ฐ›์€ ๋ฐฉ์„ ๋‹ด๋Š” Map์ด ํ•„์š”ํ•˜๋‹ค. Map์€ ๋ฐฉ ๋ฒˆํ˜ธ์™€ ๋‹ค์Œ ๋ฐฉ ๋ฒˆํ˜ธ๋ฅผ ๋‹ด๋Š”๋‹ค.
  2. ๊ณ ๊ฐ์ด ์›ํ•˜๋Š” ๋ฐฉ์ด ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ, Map์— ํ•ด๋‹น ๋ฐฉ ๋ฒˆํ˜ธ์™€ ๋‹ค์Œ ๋ฐฉ ๋ฒˆํ˜ธ๋ฅผ ๋„ฃ๋Š”๋‹ค.
  3. ๊ณ ๊ฐ์ด ์›ํ•˜๋Š” ๋ฐฉ์ด ๋น„์–ด์žˆ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ๋ฐฉ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ๋Š”๋‹ค.

๐Ÿ“Œ ์ฝ”๋“œ

import java.util.*;
class Solution {

    @Test
    void test() {
        assertThat(solution(10, new long[]{1,3,4,1,3,1})).isEqualTo(new long[]{1,3,4,2,5,6});
    }

    private Map<Long, Long> rooms = new HashMap<>();
    
    public long[] solution(long k, long[] room_number) {
        long[] answer = new long[room_number.length];
        for (int i = 0; i < room_number.length; i++) {
            Long roomNumber;
            if (!rooms.containsKey(room_number[i])) {
                roomNumber = room_number[i];
            } else {
                roomNumber = findRoomNumber(room_number[i]);
            }
            answer[i] = roomNumber;
            rooms.put(roomNumber, roomNumber + 1);
        }
        return answer;
    }

    private Long findRoomNumber(Long roomNumber) {
        if (!rooms.containsKey(roomNumber)) return roomNumber;
        else {
            Long temp = findRoomNumber(rooms.get(roomNumber));
            rooms.put(roomNumber, temp);
            return temp;
        }
    }
}
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ ํ•ด์„ค

“2019๋…„ ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ” ๊ณต๊ฐœ ์ฑ„์šฉ์„ ์œ„ํ•œ 1์ฐจ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ์ง€๋‚œ 2019๋…„ 11์›” 9์ผ ์˜คํ›„ 2์‹œ๋ถ€ํ„ฐ 6์‹œ๊นŒ์ง€ ์ด 4์‹œ๊ฐ„์— ๊ฑธ์ณ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ’19๋…„ ์‹ ์ž…๊ณต์ฑ„ 1์ฐจ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์‹œ์— 7๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋˜๊ณ  5์‹œ๊ฐ„์˜ ํ’€์ด ์‹œ๊ฐ„์ด ์ฃผ์–ด์กŒ๋˜ ๊ฒƒ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ด๋ฒˆ ์ธํ„ด ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋Š” 5๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋˜๊ณ  4์‹œ๊ฐ„์˜ ํ’€์ด ์‹œ๊ฐ„์ด ์ฃผ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ธํ„ด์˜ ๊ฒฝ์šฐ ์‹ ์ž… ๊ณต์ฑ„์™€๋Š” ๋‹ฌ๋ฆฌ ์ธํ„ด ๊ณผ์ •์„ ํ†ตํ•ด ์ถ”๊ฐ€ […]

tech.kakao.com