๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/Programmers

[Programmers] ํ”„๋ฆฐํ„ฐ

 

 

 

๋ฌธ์ œ 

 

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

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๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

 

ํ•ด์„ค ์ฝ”๋“œ 
def solution(priorities, location):
    # Queue ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 
    printer = [(i,p) for i,p in enumerate(priorities)]
    turn = 0
    print(printer)
    
    while printer:
        job = printer.pop(0)
        # ๋‚˜๋ณด๋‹ค ์ค‘์š”ํ•œ job์ด ์žˆ์œผ๋ฉด ์ž๊ธฐ ์ž์‹ ์„ ๊ฐ€์žฅ ๋’ค์— append ํ•œ๋‹ค.
        if any(job[1] < other_job[1] for other_job in printer):
            printer.append(job)
        # ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ job์ด๋ฉด ์ˆ˜ํ–‰ํ•˜๊ณ  location๊ณผ ๋น„๊ตํ•œ๋‹ค. 
        else:
            turn += 1
            if job[0] == location:
                print(job[0])
                break 
    return turn
๋ถ„์„ > ์ด ์ฝ”๋“œ์˜ ์ „๊ฐœ ์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. ํ๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ ๊ฐ€์žฅ ์•ž์˜ ์›์†Œ๋ฅผ pop ํ•˜๋ฉด์„œ ๊ทธ ์›์†Œ๋ณด๋‹ค ์ค‘์š”ํ•œ ์›์†Œ๊ฐ€ ๋’ค์— ์žˆ์œผ๋ฉด ์ž๊ธฐ ์ž์‹ ์„ ๋ฐฐ์—ด ๊ฐ€์žฅ ๋’ค์— ์ถ”๊ฐ€ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด turn์„ ์ฆ๊ฐ€์‹œ๋ฉด์„œ index๋ฅผ ์„ธ๋‹ค๊ฐ€ job[0] ์ด location๊ณผ ์ผ์น˜ํ•˜๋Š” ์ˆœ๊ฐ„ while ๋ฌธ์„ ์ข…๋ฃŒํ•˜๊ณ  turn ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ์ฝ”๋“œ์—์„œ ์ƒˆ๋กœ ์•Œ๊ฒŒ๋œ ๊ฐœ๋…์ด ํ์ธ๋ฐ, ํ๋Š” ํŠœํ”Œ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์˜ index์™€ value๊ฐ’์„ ํ•œ๊บผ๋ฒˆ์— ๋ฌถ์–ด์ค„ ์ˆ˜ ์žˆ๊ณ  ๊ทธ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜ enumerate ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  any๋ผ๋Š” ํ•จ์ˆ˜ ๋˜ํ•œ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, any๋Š” ํ•˜๋‚˜๋ผ๋„ true ์ธ๊ฒŒ ์žˆ์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ์— ์—ฌ๊ธฐ์„œ๋Š” ๊ธฐ์ค€์ด ๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ์›์†Œ์˜ value ๊ฐ’๋ณด๋‹ค ํฐ ์ˆ˜๊ฐ€ ๋ฐฐ์—ด์— ๋‚จ์•„์žˆ์œผ๋ฉด์ด๋ผ๋Š” ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ any๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค. 

 

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํ”„๋ฆฐํ„ฐ

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

programmers.co.kr