
์์์๋ ๋งค๋ ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ๊ฐ ์ด๋ฆฝ๋๋ค. ํด์ค์ง๋ค์ ์ ์๋ค์ด ์๊ธฐ ๋ฐ๋ก ์์ ์ ์๋ฅผ ์ถ์ํ ๋ ์ถ์ํ ์ ์์ ์ด๋ฆ์ ๋ถ๋ฆ ๋๋ค. ์๋ฅผ ๋ค์ด 1๋ฑ๋ถํฐ 3๋ฑ๊น์ง "mumu", "soe", "poe" ์ ์๋ค์ด ์์๋๋ก ๋ฌ๋ฆฌ๊ณ ์์ ๋, ํด์ค์ง์ด "soe"์ ์๋ฅผ ๋ถ๋ ๋ค๋ฉด 2๋ฑ์ธ "soe" ์ ์๊ฐ 1๋ฑ์ธ "mumu" ์ ์๋ฅผ ์ถ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ฆ "soe" ์ ์๊ฐ 1๋ฑ, "mumu" ์ ์๊ฐ 2๋ฑ์ผ๋ก ๋ฐ๋๋๋ค.
์ ์๋ค์ ์ด๋ฆ์ด 1๋ฑ๋ถํฐ ํ์ฌ ๋ฑ์ ์์๋๋ก ๋ด๊ธด ๋ฌธ์์ด ๋ฐฐ์ด players์ ํด์ค์ง์ด ๋ถ๋ฅธ ์ด๋ฆ์ ๋ด์ ๋ฌธ์์ด ๋ฐฐ์ด callings๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฒฝ์ฃผ๊ฐ ๋๋ฌ์ ๋ ์ ์๋ค์ ์ด๋ฆ์ 1๋ฑ๋ถํฐ ๋ฑ์ ์์๋๋ก ๋ฐฐ์ด์ ๋ด์ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
5 โค players์ ๊ธธ์ด โค 50,000
players[i]๋ i๋ฒ์งธ ์ ์์ ์ด๋ฆ์ ์๋ฏธํฉ๋๋ค.
players์ ์์๋ค์ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
players์๋ ์ค๋ณต๋ ๊ฐ์ด ๋ค์ด๊ฐ ์์ง ์์ต๋๋ค.
3 โค players[i]์ ๊ธธ์ด โค 10
2 โค callings์ ๊ธธ์ด โค 1,000,000
callings๋ players์ ์์๋ค๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
๊ฒฝ์ฃผ ์งํ์ค 1๋ฑ์ธ ์ ์์ ์ด๋ฆ์ ๋ถ๋ฆฌ์ง ์์ต๋๋ค.
| players | callings | result |
|---|---|---|
| ["mumu", "soe", "poe", "kai", "mine"] | ["kai", "kai", "mine", "mine"] | ["mumu", "kai", "mine", "soe", "poe"] |
์ด์ค ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ์๋ก์ ์๋ฆฌ๋ฅผ ์ค์ํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด ์๊ฐ ๋ณต์ก๋๊ฐ O(n * m)์ด ๋์ด ์คํจ๋ฅผ ํ๋ค...
function solution(players, callings) {
var answer = [];
for(let i = 0;i<callings.length;i++){
for(let j = 0;j<players.length;j++){
// ๋ง์ฝ ์ผ์นํ๋ฉด???
if (callings[i] === players[j]) {
// 1๋ฑ์ด ์๋๊ฒฝ์ฐ ์ค์
if (j > 0) {
[players[j - 1], players[j]] = [players[j], players[j - 1]];
}
break;
}
}
}
return players;
}
์ฒ์ ์๋ํ์๋ ๋ ์ฌ๋๋ ๋ฐฉ๋ฒ์ map์ ์ฌ์ฉํ๋๊ฑฐ์๋ค. ํ์ง๋ง "1LV๋ฌธ์ ์ธ๋ฐ map์ ์ฐ๊ฒ ์ด???"๋ผ๋ ์๊ฐ์ ๋ฐ๋ก ํจ์คํ๋ค. ํ์ง๋ง ์ด๊ฒ์ด ์ ๋ต์ด์๋คใ ใ . map์ ์ฌ์ฉํด์ ๋ฑ์๋ฅผ ์ ์ฅํด๋๊ณ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ๋ฑ์๋ฅผ ๋ฐ๊ฟ์คฌ๋ค.
function solution(players, callings) {
const playersMap = new Map();
// map์ ์ฌ์ฉํ์ฌ ๋ฑ์ ์ ์ฅ
for(let i = 0;i<players.length;i++){
playersMap.set(players[i], i);
}
for(let i = 0;i<callings.length;i++){
// ๋ถ๋ฆฐ ์ด๋ฆ
const callingPlayer = callings[i];
// ๋ถ๋ฆฐ ์ด๋ฆ ๋ฑ์
const callingPlayerIndex = playersMap.get(callingPlayer);
// ๋ง์ฝ ๋ถ๋ฆฐ ์ด๋ฆ ๋ฑ์๊ฐ 1๋ฑ์ด ์๋๋ฉด
if(callingPlayerIndex > 0){
// ๋ถ๋ฆฐ ์ด๋ฆ ์์ ๋ฑ์ ์ด๋ฆ
const previousPlayer = players[callingPlayerIndex - 1];
// ์ค์
[players[callingPlayerIndex-1], players[callingPlayerIndex]] = [players[callingPlayerIndex], players[callingPlayerIndex-1]];
// map์ ๋ฑ์ ๋ฐ๊ฟ์ฃผ๊ธฐ
playersMap.set(callingPlayer, callingPlayerIndex - 1);
playersMap.set(previousPlayer, callingPlayerIndex);
}
}
return players;
}
์ค๋์ ์๋ฐ๋ฅผ ํ๋ฉด์ ๊ฐ๋งํ ํธ๋ํฐ ํ ์๊ฐ์ ์ฝํ ๋ฅผ ํ์ด๋ณด์๊ณ ๊ฒฐ์ฌํ๋ค. ์๋น์ ํ๋ฉด์ ๋ก์ง์ ์๊ฐํ๊ณ , ์๊ฐ์ด ๋๋ฌ์ ๋๋ง ์ฝ๋๋ฅผ ์์ฑํด์ ํธ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ธ๋ค. ํ์ง๋ง ๋จธ๋ฆฌ ์์ผ๋ก ๋ก์ง์ ์๊ฐํ๋ ์ฐ์ต์ ํด๋ณด๋ ์์ธ๋ก ์ข์ ํ์ต๋ฒ ๊ฐ์๋ค. ์ค๋์ ์๋ฐ๋ ํ๊ณ ์ฝํ ๋ ํ์์ผ๋ ์์ ๋ญํค๋นํค์์~~!!๐!!๐