[PS] 99ํด๋ฝ ์ฝํ ์คํฐ๋ 26์ผ์ฐจ TIL (๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ)
ํ๊ทธ: 99ํด๋ฝ, PS, TIL, ์๋ฎฌ๋ ์ด์ , ์ฝ๋ฉํ ์คํธ์ค๋น, ํญํด99
์นดํ ๊ณ ๋ฆฌ: PS
๋ฌธ์
์ค๋ช
ํ์ฌ ๋ฌ๋ฆฌ๊ธฐ ์์๊ฐ ๋ฐฐ์ด๋ก ๋ค์ด์ค๊ณ , ์ ์ ์๋ฅผ ์ถ์ํ ๋ ํด์ค์ง์ด ์ด๋ฆ์ ๋ถ๋ฅธ๋ค. ํด์ค์ง์ด ์ด๋ฆ์ ๋ถ๋ฅธ ์ ์๊ฐ callings ๋ฐฐ์ด๋ก ๋ค์ด์ฌ๋, ๋ณ๊ฒฝ๋ ์์๋ฅผ ๋ฆฌํดํ๋ ๋ฌธ์ .
Map ์ผ๋ก ์ ์์ ์์๋ฅผ ๊ณ์ ๊ด๋ฆฌํ๋ฉด์ callings ์์ ๋ถ๋ฆฐ ์ ์๋ฅผ players ๋ฐฐ์ด์์ ์์๋ฅผ ๋ฐ๊พธ๊ณ , Map ์๋ ์์๋ฅผ ๊ฐฑ์ ํด ์ค๋ค. for ๋ฌธ์์ ๊ณ์ ๋ค์ ์ ์๋ฅผ ๋ถ๋ฌ์ ๋ฐ๋ณต ์์ ํ๋ค.
Map ์ผ๋ก ์ ์์ ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ฒ ๋๋ฉด ํ์์ ์ ๋ฆฌํ๋ค. Integer index = map.get(call);
๋ O(1) ์ ๋ฐ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ ์ ์์ด ์ ์ฒด ์๊ฐ๋ณต์ก๋๋ callings ๋ฐฐ์ด ํฌ๊ธฐ๋ง ๊ณ ๋ คํ๋ฉด ๋๋ค.
ํ์ด
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public String[] solution(String[] players, String[] callings) {
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < players.length; i++) {
String player = players[i];
map.put(player, i);
}
for (String call : callings) {
Integer index = map.get(call);
if (index == 0) continue;
String prev = players[index - 1];
players[index - 1] = call;
players[index] = prev;
map.put(call, index - 1);
map.put(prev, index);
}
return players;
}
}
Map ์ผ๋ก ์ธ๋ฑ์ค ๊ด๋ฆฌ๋ฅผ ํ์ง ์๋ ๊ฒฝ์ฐ (์๊ฐ์ด๊ณผ)
๋ง์ฝ Map ์ ์ฌ์ฉํ์ง ์๊ณ ์ ๋ ฅ ๋ฐฐ์ด์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค๋ฉด ์ด๋จ๊น?
1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public String[] solution(String[] players, String[] callings) {
List<String> list = Arrays.asList(players);
for (String call : callings) {
int index = list.indexOf(call);
if (index == 0)
continue;
Collections.swap(list, index, index - 1);
}
return players;
}
}
์ฝ๋๊ฐ ์งง์ ๊ฐ๋
์ฑ์ ๋์์ง์ง๋ง, list.indexOf(call)
๋ถ๋ถ์์ ๋ด๋ถ์ ์ผ๋ก ์์ฐจ์ ์ผ๋ก ํ์ ํ๊ธฐ ๋๋ฌธ์ O(n) ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
callings ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ m ์ด๋ผ๊ณ ํ์๋, ์ ์ฒด ์๊ฐ ๋ณต์ก๋๋ O(n * m) ์ด ๋๋ค.
๋ฌธ์ ์์ callings ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์ต๋ 100๋ง์ด๊ณ , player ์ต๋ ํฌ๊ธฐ๊ฐ 50000 ์ด๋ค. (n * m = 500์ต)
๋๊ธ๋จ๊ธฐ๊ธฐ