๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
the others/Algorithm

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํ”„๋ฆฐํ„ฐ ๋ฌธ์ œ ํ’€์ด

by ciocio 2021. 8. 24.

๐Ÿ“Œ  ๋ฌธ์ œ

 

โ—พ  ํ•ด์„ค

 

์ผ๋ฐ˜์ ์ธ ํ”„๋ฆฐํ„ฐ๋Š” ์ธ์‡„ ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•œ ๋ฌธ์„œ๊ฐ€ ๋‚˜์ค‘์— ์ธ์‡„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๋ฅผ ๋จผ์ € ์ธ์‡„ํ•˜๋Š” ํ”„๋ฆฐํ„ฐ๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒˆ๋กญ๊ฒŒ ๊ฐœ๋ฐœํ•œ ํ”„๋ฆฐํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ธ์‡„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

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;
    }
  }
}

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€