Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป ์ฝ”ํ…Œ/๐Ÿ“Œ JAVA

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/JAVA] ๋‹ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ

๋ฐ˜์‘ํ˜•

 

 

 

๐Ÿ”— ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

 

https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 


๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ

 

 

๐Ÿƒ๐Ÿป‍โ™‚๏ธ ๋‹ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ

  • ๊ทœ์น™
    • ํ•ด์„ค์ง„์ด ๋ถ€๋ฅธ ์„ ์ˆ˜๋Š” ์ž๊ธฐ ์•ž ์„ ์ˆ˜์™€ ์œ„์น˜๋ฅผ ๋ฐ”๊พผ๋‹ค.
    • ํ•ญ์ƒ 1๋“ฑ์€ ์ด๋ฆ„์ด ๋ถˆ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
    • ๋ชจ๋“  ์ถ”์›”์ด ๋๋‚œ ํ›„์˜ ์ตœ์ข… ์ˆœ์œ„๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ’Œ ์ž…๋ ฅ

  • players: 1๋“ฑ๋ถ€ํ„ฐ ํ˜„์žฌ ์ˆœ์„œ๊นŒ์ง€์˜ ์„ ์ˆ˜ ์ด๋ฆ„ ๋ฐฐ์—ด
  • callings: ์ถ”์›”ํ•œ ์„ ์ˆ˜ ์ด๋ฆ„ ๋ฐฐ์—ด

 

 

์˜ˆ๋ฅผ ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋‹ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ๊ฐ€ ์ด๋ค„์ง„๋‹ค.

players  = ["mumu", "soe", "poe", "kai", "mine"]
callings = ["kai", "kai", "mine", "mine"]

๐Ÿ“ ์ง„ํ–‰ ๊ณผ์ •
1) "kai" → 4๋“ฑ์ธ kai๊ฐ€ 3๋“ฑ์ธ poe ์ถ”์›”    // ["mumu", "soe", "kai", "poe", "mine"]
2) "kai" → 3๋“ฑ์ธ kai๊ฐ€ 2๋“ฑ์ธ soe ์ถ”์›”    // ["mumu", "kai", "soe", "poe", "mine"]
3) "mine" → 5๋“ฑ์ธ mine์ด 4๋“ฑ์ธ poe ์ถ”์›”  // ["mumu", "kai", "soe", "mine", "poe"]
4) "mine" → 4๋“ฑ์ธ mine์ด 3๋“ฑ์ธ soe ์ถ”์›”  // ["mumu", "kai", "mine", "soe", "poe"]

์ตœ์ข… ์ˆœ์œ„ → ["mumu", "kai", "mine", "soe", "poe"]

 


๐Ÿ’ก ์•„์ด๋””์–ด

 

1๏ธโƒฃ ์ด๋ฆ„์„ ์ธ๋ฑ์Šค๋กœ ๋งคํ•‘ํ•˜๊ธฐ

์„ ์ˆ˜ ๋ฐฐ์—ด players๋Š” ํ˜„์žฌ ์ˆœ์œ„ ์ˆœ์œผ๋กœ ๋“ค์–ด์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ˜ธ๋ช…๋œ ์ด๋ฆ„์œผ๋กœ ์ฆ‰์‹œ ์œ„์น˜๋ฅผ ์ฐพ์œผ๋ ค๋ฉด, ์ด๋ฆ„ → ์ธ๋ฑ์Šค ๋งคํ•‘์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

 

Map<String, Integer> map = new HashMap<>();     
for(int i = 0; i < players.length; i++){
    map.put(players[i], i);
}

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด "kai"๊ฐ€ ๋ถˆ๋ ธ์„ ๋•Œ indexMap.get("kai")๋กœ ํ˜„์žฌ ๋“ฑ์ˆ˜ ์ธ๋ฑ์Šค๋ฅผ O(1)๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

2๏ธโƒฃ ์ถ”์›” ์ฒ˜๋ฆฌํ•˜๊ธฐ

ํ•ด์„ค์ง„์ด ๋ถ€๋ฅด๋Š” ์ด๋ฆ„์€ ๋ฐ”๋กœ ์•ž ์„ ์ˆ˜์™€์˜ ์ž๋ฆฌ ๊ตํ™˜์„ ์˜๋ฏธํ•œ๋‹ค.

์ฆ‰, idx์˜ ์„ ์ˆ˜๊ฐ€ idx - 1์˜ ์„ ์ˆ˜์™€ ์Šค์™‘๋˜๋Š” ๊ฒƒ์ด๋‹ค.

for (int i = 0; i < callings.length; i++) {
    int idx = indexMap.get(callings[i]); // ํ˜ธ๋ช…๋œ ์„ ์ˆ˜์˜ ํ˜„์žฌ ์œ„์น˜
    String front = answer[idx - 1];      // ๋ฐ”๋กœ ์•ž ์„ ์ˆ˜

    // ๋ฐฐ์—ด์—์„œ ๋‘ ์„ ์ˆ˜ ์ž๋ฆฌ ๊ตํ™˜
    answer[idx - 1] = answer[idx];
    answer[idx] = front;

    // ๋‘ ๋ช…์˜ ์ธ๋ฑ์Šค๋งŒ ๊ฐฑ์‹  (๋™๊ธฐํ™” ๋ณด์žฅ)
    indexMap.put(answer[idx - 1], idx - 1);
    indexMap.put(answer[idx], idx);
}

 

์ด๋•Œ idx - 1์ด๋ผ๊ณ  ํ•ด์ค€ ์ด์œ ๋Š”, ์–ด์ฐจํ”ผ ๋ฌธ์ œ ์ œ์•ฝ์กฐ๊ฑด ์ƒ 1๋“ฑ์€ ๋ถˆ๋ฆฌ์ง€ ์•Š์œผ๋ฏ€๋กœ ํ•ญ์ƒ ๊ดœ์ฐฎ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 


๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์ตœ์ข… ์ฝ”๋“œ

import java.util.HashMap;
import java.util.Map;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        
        String[] answer = players;
        
        Map<String, Integer> map = new HashMap<>();
        for(int i = 0; i < players.length; i++){
            map.put(players[i], i);
        }
        
        for(int i = 0; i < callings.length; i++){
            int idx = map.get(callings[i]);
            String name = answer[idx - 1];
            
            answer[idx - 1] = answer[idx];
            answer[idx] = name;
            map.put(answer[idx - 1], idx -1);
            map.put(answer[idx], idx);
        }
        
        return answer;
    }
}

 


๐Ÿ•‘ ์‹œ๊ฐ„ ๋ณต์žก๋„

1๏ธโƒฃ ์ด๋ฆ„ → ์ธ๋ฑ์Šค ๋งคํ•‘

for (int i = 0; i < players.length; i++) {
    map.put(players[i], i);
}

 

players ๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉฐ ํ•ด์‹œ๋งต์— ์ €์žฅํ•˜๋ฏ€๋กœ O(N)์ด๋‹ค.

(์ด๋•Œ, N์€ ์„ ์ˆ˜์˜ ์ˆ˜)

 

 

2๏ธโƒฃ ์ถ”์›” ์ฒ˜๋ฆฌ

for (int i = 0; i < callings.length; i++) {
    int idx = map.get(callings[i]);    // O(1)
    String front = answer[idx - 1];    // O(1)
    answer[idx - 1] = answer[idx];     // O(1)
    answer[idx] = front;               // O(1)
    map.put(answer[idx - 1], idx - 1); // O(1)
    map.put(answer[idx], idx);         // O(1)
}

 

๊ฐ ํ˜ธ์ถœ์— ๋Œ€ํ•ด ์ƒ์ˆ˜ ์‹œ๊ฐ„ ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ  ๋‚ด๋ถ€ ์—ฐ์‚ฐ์€ O(1)์ด๊ณ ,

ํ˜ธ์ถœ ํšŸ์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(M)์ด๋‹ค.

(์ด๋•Œ, M์€ ํ˜ธ์ถœ ํšŸ์ˆ˜)

 

 

 

๐Ÿ‘‰๐Ÿป ๋”ฐ๋ผ์„œ ์ตœ์ข… ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N + M)์ด๋‹ค.

๋ฐ˜์‘ํ˜•