์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋จธ์ค ํ๋ฆฐํฐ ๋ฌธ์ ํ์ด
๐ ๋ฌธ์
โพ ํด์ค
์ผ๋ฐ์ ์ธ ํ๋ฆฐํฐ๋ ์ธ์ ์์ฒญ์ด ๋ค์ด์จ ์์๋๋ก ์ธ์ํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ค์ํ ๋ฌธ์๊ฐ ๋์ค์ ์ธ์๋ ์ ์์ต๋๋ค. ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ์ค์๋๊ฐ ๋์ ๋ฌธ์๋ฅผ ๋จผ์ ์ธ์ํ๋ ํ๋ฆฐํฐ๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. ์ด ์๋กญ๊ฒ ๊ฐ๋ฐํ ํ๋ฆฐํฐ๋ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ธ์ ์์ ์ ์ํํฉ๋๋ค.
1. ์ธ์ ๋๊ธฐ๋ชฉ๋ก์ ๊ฐ์ฅ ์์ ์๋ ๋ฌธ์(J)๋ฅผ ๋๊ธฐ๋ชฉ๋ก์์ ๊บผ๋ ๋๋ค.
2. ๋๋จธ์ง ์ธ์ ๋๊ธฐ๋ชฉ๋ก์์ J๋ณด๋ค ์ค์๋๊ฐ ๋์ ๋ฌธ์๊ฐ ํ ๊ฐ๋ผ๋ ์กด์ฌํ๋ฉด J๋ฅผ ๋๊ธฐ๋ชฉ๋ก์ ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ฃ์ต๋๋ค.
3. ๊ทธ๋ ์ง ์์ผ๋ฉด J๋ฅผ ์ธ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, 4๊ฐ์ ๋ฌธ์(A, B, C, D)๊ฐ ์์๋๋ก ์ธ์ ๋๊ธฐ๋ชฉ๋ก์ ์๊ณ ์ค์๋๊ฐ 2 1 3 2 ๋ผ๋ฉด C D A B ์์ผ๋ก ์ธ์ํ๊ฒ ๋ฉ๋๋ค.
๋ด๊ฐ ์ธ์๋ฅผ ์์ฒญํ ๋ฌธ์๊ฐ ๋ช ๋ฒ์งธ๋ก ์ธ์๋๋์ง ์๊ณ ์ถ์ต๋๋ค. ์์ ์์์ C๋ 1๋ฒ์งธ๋ก, A๋ 3๋ฒ์งธ๋ก ์ธ์๋ฉ๋๋ค.
ํ์ฌ ๋๊ธฐ๋ชฉ๋ก์ ์๋ ๋ฌธ์์ ์ค์๋๊ฐ ์์๋๋ก ๋ด๊ธด ๋ฐฐ์ด priorities์ ๋ด๊ฐ ์ธ์๋ฅผ ์์ฒญํ ๋ฌธ์๊ฐ ํ์ฌ ๋๊ธฐ๋ชฉ๋ก์ ์ด๋ค ์์น์ ์๋์ง๋ฅผ ์๋ ค์ฃผ๋ location์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ด๊ฐ ์ธ์๋ฅผ ์์ฒญํ ๋ฌธ์๊ฐ ๋ช ๋ฒ์งธ๋ก ์ธ์๋๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
โพ ์ ํ ์ฌํญ
- ํ์ฌ ๋๊ธฐ๋ชฉ๋ก์๋ 1๊ฐ ์ด์ 100๊ฐ ์ดํ์ ๋ฌธ์๊ฐ ์์ต๋๋ค.
- ์ธ์ ์์ ์ ์ค์๋๋ 1~9๋ก ํํํ๋ฉฐ ์ซ์๊ฐ ํด์๋ก ์ค์ํ๋ค๋ ๋ป์ ๋๋ค.
- location์ 0 ์ด์ (ํ์ฌ ๋๊ธฐ๋ชฉ๋ก์ ์๋ ์์ ์ - 1) ์ดํ์ ๊ฐ์ ๊ฐ์ง๋ฉฐ ๋๊ธฐ๋ชฉ๋ก์ ๊ฐ์ฅ ์์ ์์ผ๋ฉด 0, ๋ ๋ฒ์งธ์ ์์ผ๋ฉด 1๋ก ํํํฉ๋๋ค.
โพ ์ ์ถ๋ ฅ ์์
priorities | location | return |
[2, 1, 3, 2] | 2 | 1 |
[1, 1, 9, 1, 1, 1] | 0 | 5 |
๐ ๋ฐฐ์ด๊ฒ
์๋ฐ์คํฌ๋ฆฝํธ ๊ณ ์ฐจํจ์ Array.prototype.some
๋ฌธ์ ๋ฅผ ํ๋ค Array.prototype.some ๊ณ ์ฐจํจ์์ ์ข์ ์ฐ์์ ๋ฐ๊ฒฌํด์ ๊ธ์ ์ด๋ค.
๊ทธ๋์ some์ ์ด๋ ๊ฒ ์จ๋ณธ์ ์ด ์๋๋ฐ ์ฌ์ค ํ๋ฒ๋ ์์จ๋ดค์ ๋๋ฌด ์๋ก์ ๋ค ใ
ใ
๐ ๋ด ํ์ด
function solution(priorities, location) {
var answer = 0;
// ๋ด๊ฐ ๊ตฌํ๊ณ ์ถ์ ๊ฐ์ ๋ฌธ์์ด๋ก ์ฒ๋ฆฌํด์ ๋ค๋ฅธ ์ซ์๋ค๊ณผ ๊ตฌ๋ณํด์คฌ๋ค
priorities[location] = String(priorities[location]);
while(priorities.length > 0){
for(let i=0; i<priorities.length; i++){
// ์ต๋๊ฐ์ ๊ณ์ ๊ตฌํ๋ฉด์ ๋ฐฐ์ด ๋ด ์๋ฆฌ๋จผํธ๋ค์ ์ง์๋๊ฐ๋ค
let max = Math.max(...priorities);
if(Number(priorities[0]) !== max){
priorities.push(priorities.shift());
}else{
// ์ ๊ฑฐํด์ผํ๋ ๋์์ด ๋ฌธ์์ด์ผ ๋ ๋ต์ ๋ฆฌํดํ๋๋ก ๋ง๋ค์๋ค
if(typeof priorities[0] === 'string'){
return answer + 1;
}
answer++;
priorities.shift();
}
}
}
}
๐ ๋ค๋ฅธ ์ฌ๋ ํ์ด
function solution(priorities, location) {
var answer = 0;
// ๊ตฌํ๊ณ ์ถ์ ๊ฐ์๋ true๋ฅผ, ์ด์ธ์ ๊ฐ์๋ false๋ฅผ ์ค ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์๋ค
// ๋๋ ๊ฐ์ฒด๋ก ์ ๊ทผํ์ ๋ index ์์ฒด๋ฅผ ํค๊ฐ์ผ๋ก ์คฌ์๋๋ฐ ์ด๊ฑด ์๋ก์ด ๋ฐ์์ด์๋ค
const newArr = priorities.map((el, idx) => ({
my: idx === location,
val: el
}));
while(true){
let cur = newArr.shift();
// ์ฌ๊ธฐ์ some์ ์ฐ์์ด ๋์จ๋ค.
// ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ๋๋ฉด์ ๊ฒ์ฌํ์ ๋ ํ๋๋ผ๋ ์กฐ๊ฑด์ ํด๋นํ๋ ๊ฐ์ด ์์ผ๋ฉด true๋ฅผ ๋ฆฌํด,
// ํด๋นํ๋ ๊ฐ์ด ์์ ์์ ๋ false๋ฅผ ๋ฆฌํดํ๋ค.
// ๋งค๋ฒ ๋ชจ๋ ๊ฐ์ ๋น๋น ๋๋ฉด์ ์ต๋๊ฐ์ ์ฐพ์์ผ ํ๋ ์ด ๋ฌธ์ ์ ์ ํฉํ ๊ณ ์ฐจํจ์์๋ค โญโญ
if(newArr.some(el => el.val > cur.val)){
newArr.push(cur);
}
else{
answer++;
if(cur.my) return answer;
}
}
}