์ฌ๋์งธ ๋ ์ '๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ' ์ด๋ผ๋ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์์ต๋๋ค.
์ด ๊ธ์์๋ ํด๋น ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง, ๊ฒช์๋ ์ด๋ ค์, ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด ์ ์ ํ๊ณ ํ๊ธฐ ์ํด์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค ๐
๋ฌธ์ ์ค๋ช
์์์๋ ๋งค๋ ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ๊ฐ ์ด๋ฆฝ๋๋ค. ํด์ค์ง๋ค์ ์ ์๋ค์ด ์๊ธฐ ๋ฐ๋ก ์์ ์ ์๋ฅผ ์ถ์ํ ๋ ์ถ์ํ ์ ์์ ์ด๋ฆ์ ๋ถ๋ฆ ๋๋ค.
์ ์๋ค์ ์ด๋ฆ์ด 1๋ฑ๋ถํฐ ํ์ฌ ๋ฑ์ ์์๋๋ก ๋ด๊ธด ๋ฌธ์์ด ๋ฐฐ์ด players์ ํด์ค์ง์ด ๋ถ๋ฅธ ์ด๋ฆ์ ๋ด์ ๋ฌธ์์ด ๋ฐฐ์ด callings๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฒฝ์ฃผ๊ฐ ๋๋ฌ์ ๋ ์ ์๋ค์ ์ด๋ฆ์ 1๋ฑ๋ถํฐ ๋ฑ์ ์์๋๋ก ๋ฐฐ์ด์ ๋ด์ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
(์ ์ถ๋ ฅ์ ์)
players | callings | result |
["mumu", "soe", "poe", "kai", "mine"] | ["kai", "kai", "mine", "mine"] | ["mumu", "kai", "mine", "soe", "poe"] |
๋ฌธ์ ํด๊ฒฐ ์ ๊ทผ
์ด๋ฒ ๋ฌธ์ ์ ์ ๊ทผํ ๋๋ ์ด๋ป๊ฒ ์ ๊ทผํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด ์ข ๋์๋ค. ๋ฐฐ์ด์ ํญ์ ํท๊ฐ๋ฆฐ๋ค..ใ
์ฒ์์ ํด์ค์ง์ด ๋ถ๋ฅด๋ callings๋ฅผ players์์ ์ฐพ์ ์์ ์์ calling ๋ ์ ์์ ์์๋ฅผ ๋ฐ๊พธ๋ฉด ๋๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋์ ์ผ๋จ ํ์ฌ ์ ์๋ค์ ์์ players(๋๋ rankArr์ด๋ผ๋ ๋ณ์๋ช ์ ์ฌ์ฉ)๋ฅผ index์ name์ ๋ด์ ๊ฐ์ฒด ๋ฐฐ์ด๋ก rankIndex์ ์์ฑํ์๋ค.
ํด์ค์ง๋ค์ด ๋ถ๋ฅธ callings์ forEach๋ก ์ํํ๋ฉฐ ํ์ฌ ์ ์๋ค์ ์์์์ calling ๋ ์ ์๋ฅผ ์ฐพ์ index๋ฅผ -1ํ์ฌ ์์ผ๋ก ์ญ์ ์์ผ์ฃผ๊ณ ๋ฐ๋ฆฐ์ ์๋ฅผ ์๋ calling๋ ์ ์์ ์์น๋ก ์ฎ๊ฒจ์ค๋ค.
์ฌ๊ธฐ๊น์ง ํ๋ฉด ์์ง ์ ๋๋ก ์ค์์ด ๋์ง ์๋๋ค. ์ค์์ ํ๋ ค๋ฉด key index๋ ๊ฐ์ด ๋ฐ๊พธ์ด์ค๋ค. ๊ฐ์ฒด ๋ฐฐ์ด์์ rankIndex๋ ์๋ก ๋ฐ๊พธ์ด์ ์ฒ๋ฆฌํ์๋ค.
๋ด๊ฐ ํผ ๋ฐฉ๋ฒ
// ["mumu", "soe", "poe", "kai", "mine"]
// ["kai", "kai", "mine", "mine"]
function solution(rankArr, callings) {
const rankIndex = {};
rankArr.forEach((player, index) => { rankIndex[player] = index; });
callings.forEach((calling) => {
const currentIndex = rankIndex[calling];
const frontPlayer = rankArr[currentIndex - 1];
if (frontPlayer) {
rankArr[currentIndex -1] = calling;
rankArr[currentIndex] = frontPlayer;
}
rankIndex[calling] --;
rankIndex[frontPlayer] ++;
});
return rankArr;
}
๋ฐฐ์ด ์ ๊ณผ ๋๋ ์
๋ฐฐ์ด์ ์ฒ๋ฆฌํ ๋ index์ ๊ฐ์ด ์ฒ๋ฆฌํ๋ฉด ํท๊ฐ๋ฆฌ๋ ์ ์ด ๋ง์๋ฐ ์ด๋ฐ key์ value๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด์ ์ต์ํด์ ธ์ผ๊ฒ ๋ค ๐