๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

ํ”„๋ฆฐํ„ฐ ๋ณธ๋ฌธ

์ถœ์ฒ˜ : ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค https://programmers.co.kr/

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

 

 

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

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

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…
์˜ˆ์ œ #1
๋ฌธ์ œ์— ๋‚˜์˜จ ์˜ˆ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์˜ˆ์ œ #2
6๊ฐœ์˜ ๋ฌธ์„œ(A, B, C, D, E, F)๊ฐ€ ์ธ์‡„ ๋Œ€๊ธฐ๋ชฉ๋ก์— ์žˆ๊ณ  ์ค‘์š”๋„๊ฐ€ 1 1 9 1 1 1 ์ด๋ฏ€๋กœ C D E F A B ์ˆœ์œผ๋กœ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

 

  ํ”„๋ฆฐํ„ฐ ๋ฌธ์ œ๋Š” queue๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์–ด์•ผ ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ์ด๋‹ค. ๋‹ค๋งŒ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๋‘ ๋ฒˆ ์ •๋„ ์ ‘ํ–ˆ์œผ๋‚˜, ์ฒซ ๋ฒˆ์งธ ํ’€ ๋•Œ๋Š” ์ „ํ˜€ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด ๋‚ด์ง€ ๋ชปํ–ˆ๊ณ , ๋‘ ๋ฒˆ์งธ ํ’€ ๋•Œ๋„ ์‰ฝ์ง€๋งŒ์€ ์•Š์•˜๋‹ค. ์šฐ์„  ํ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์•Œ๊ณ  ์žˆ์—ˆ์œผ๋‚˜ location์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์ „ํ˜€ ๊ฐ์„ ์žก์ง€ ๋ชปํ–ˆ๋‹ค. (๋ญ”๊ฐ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜๋ฉด ํ•˜๋‚˜์”ฉ ๊ฑธ๋ฆฌ๋Š” ๋Š๋‚Œ(?).. ๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ํ’€์–ด ๋†“์€ ํ’€์ด๋ฅผ ๋ณด๊ณ  ๊ณต๋ถ€๋ฅผ ํ–ˆ๋‹ค.) ๋‹ค์Œ ๋ฒˆ์— ๋งŒ๋‚ฌ์„ ๋•Œ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ํ’€์–ด๋‚ด์ง€ ์‹ถ๋‹ค.

 

๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
  1. ํ•ด๋‹น ๋ฐฐ์—ด์˜ ์š”์†Œ ์ค‘ ๊ฐ€์žฅ ํฐ ์š”์†Œ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  2. ๊ทธ๋ฆฌ๊ณ  priorities์˜ 0๋ฒˆ ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋นผ๋‚ด์–ด max๊ฐ’๊ณผ ๋น„๊ตํ•˜๊ณ  ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋‹ค์‹œ priorities์˜ ๋ฐฐ์—ด ๋งจ ๋’ค๋กœ ๋ณด๋‚ธ๋‹ค.
  3. ์ด๋•Œ location์˜ ๊ฐ’์ด 0์ธ์ง€ ํ™•์ธํ•˜๊ณ  0์ด๋ผ๋ฉด ํ•ด๋‹น ๊ฐ’์ด ๋ฐฐ์—ด์˜ 0๋ฒˆ ์ธ๋ฑ์Šค์ด๋ฏ€๋กœ ๊ฐ€์žฅ ๋’ค๋กœ ๋ณด๋‚ด์ง€๋ฏ€๋กœ priorities.length -1๋กœ ์žฌํ• ๋‹นํ•œ๋‹ค.
  4. ๋ฐ˜๋Œ€๋กœ location์˜ ๊ฐ’์ด 0์ด ์•„๋‹ˆ๋ผ๋ฉด ์ถœ๋ ฅ ๋  ์ˆ˜ ์žˆ๋Š” ์ˆœ์„œ๊ฐ€ ํ•˜๋‚˜ ๋‹น๊ฒจ์ง„ ๊ฒƒ์ด๋ฏ€๋กœ location - 1์„ ํ•ด์ค€๋‹ค.
  5. ๋งŒ์•ฝ ๋ฐฐ์—ด์˜ 0๋ฒˆ ์ธ๋ฑ์Šค์˜ ๊ฐ’์ด max์˜ ๊ฐ’๊ณผ ์ผ์น˜ํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•ด์ฃผ๊ณ  answer + 1์„ ํ•ด์ค€๋‹ค.(์ถœ๋ ฅ์ด ๋œ ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•จ)
  6. ๊ทธ๋ฆฌ๊ณ  ์ด๋•Œ ๋งŒ์•ฝ loction์ด 0์ด๋ผ๋ฉด ๊ทธ๋Œ€๋กœ answer๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  7. ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด loction - 1์„ ํ•ด์ค€๋‹ค.

 

๋‚ด๊ฐ€ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•
function solution(priorities, location){
    let answer = 0;
    let max = 0;
    let temp = [...priorities];

    while(temp.length > 0){
        max = Math.max(...temp);
        if(temp[0] !== max){
            temp.push(temp.shift());
            if(location === 0){
                location = temp.length - 1;
            }else{
                location--;
            }
        }else{
            temp.shift();
            answer++;
            if(location === 0){
                return answer;
            }
            location--;
        }
    }
}