๐ ๋ฌธ์ ์ค๋ช
์์์๋ ๋งค๋
๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ๊ฐ ์ด๋ฆฝ๋๋ค. ํด์ค์ง๋ค์ ์ ์๋ค์ด ์๊ธฐ ๋ฐ๋ก ์์ ์ ์๋ฅผ ์ถ์ํ ๋ ์ถ์ํ ์ ์์ ์ด๋ฆ์ ๋ถ๋ฆ
๋๋ค. ์๋ฅผ ๋ค์ด 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๋ฑ์ธ ์ ์์ ์ด๋ฆ์ ๋ถ๋ฆฌ์ง ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
["mumu", "soe", "poe", "kai", "mine"] | ["kai", "kai", "mine", "mine"] | ["mumu", "kai", "mine", "soe", "poe"] |
โ๏ธ ํ์ด
์ด๋ฆ์ด ๋ถ๋ฆฐ ํ์๋ฅผ ์นด์ดํ ํด์ ๊ณ์ฐํ๋ ค๋ค๊ฐ ๋๋ฌด ๋ณต์กํด์ง๋ ๊ฒ ๊ฐ์์ ๋ถ๋ฆด ๋ ๋ง๋ค ๊ฐ์ฒด๋ฅผ ์ด์ฉํด์ ์์๋ฅผ ๋ฐ๊ฟ์ฃผ๋ฉฐ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
์ด๋ฆ์ด ๋ถ๋ ธ์ ๋ ๊ทธ ์ ์์ ์์๋ฅผ ์์์ผ ์์ ์ ์์ ์์๋ฅผ ๋ฐ๊ฟ์ค์ ์๋๋ฐ ๋งค๋ฒ ํ์ํ๋ค๋ฉด ์๊ฐ์ด๊ณผ๋ก ์ด์ด์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํด์ ๋๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค. ์ฒซ ๋ฒ์งธ ๊ฐ์ฒด๋ playerOfRanks๋ก ์์๋ณ๋ก ํด๋น ์์์ ์ ์๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ง๋ค. ๋ ๋ฒ์งธ ๊ฐ์ฒด๋ ranksOfPlayer๋ก ์ ์์ ์ด๋ฆ์ ํค๋ก ๊ทธ ์ ์์ ์์๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ง๋ค.
์ด๋ฆ์ด ๋ถ๋ ธ์ ๋ ๋จผ์ ์ด์ ์ ์๊ฐ ๊ฐ์ง๊ณ ์๋ ์์์ ํด๋น ์์์ ์ ์๋ฅผ ๋ณ๊ฒฝํ๋ค. ๋ํ, ์ถ์ํ ๊ฒฝ์ฐ๋ฅผ ๋ฐ์ํ์ฌ ์ถ์ํ ์ ์์ ์์๋ฅผ ๋น๊ฒจ์ฃผ๊ณ ์ถ์ํ ์์์ ์ ์๋ฅผ ๋ณ๊ฒฝํ๋ค.
์ถ์ํ๋ ๋ชจ๋ ๊ณผ์ ์ด ์ข ๋ฃ๋๋ฉด ์์๋ณ ์ ์์ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ด๋ก ๋ฝ์ ์์๋๋ก ์ ๋ ฌ์์ผ์ฃผ๊ณ ๋ฐฐ์ด์ map ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ ์๋ง ๋จ๊ฒจ์ฃผ๊ณ ๋ฐํํด์คฌ๋ค.
โจ๏ธ ์ฝ๋
function solution(players, callings) {
var answer = [];
const playerOfRanks = {};
const ranksOfPlayer = {};
for (let i = 0; i < players.length; i++) {
ranksOfPlayer[players[i]] = i;
playerOfRanks[i] = players[i];
}
for (const calling of callings) {
const playerRank = ranksOfPlayer[calling];
ranksOfPlayer[playerOfRanks[playerRank - 1]] = playerRank;
playerOfRanks[playerRank] = playerOfRanks[playerRank - 1];
ranksOfPlayer[calling] = playerRank - 1;
playerOfRanks[playerRank - 1] = calling;
}
answer = Object.entries(playerOfRanks)
.sort((a, b) => a[0] - b[0])
.map(p => p[1]);
return answer;
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ๋ฌธ์์ด ๋๋๊ธฐ (0) | 2023.04.19 |
---|---|
[Algorithm] ๋๋ง์ ์ธ์ด (0) | 2023.04.18 |
[Algorithm] ํ๋ฒ๊ฑฐ ๋ง๋ค๊ธฐ (0) | 2023.04.16 |
[Algorithm] ๋ ์ ์ฌ์ด์ ์ ์์ (0) | 2023.04.15 |
[Algorithm] ์๊ฒฉ ์์คํ (1) | 2023.04.13 |