๐Ÿงฉ Problem Solving/[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 42883 ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2023. 8. 30. 02:45
 

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

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

programmers.co.kr


๊ฐœ์ธ์ ์œผ๋กœ ์ข€ ์–ด๋ ค์› ๋˜ ๋ฌธ์ œ. ๋กœ์ง์„ ์งœ๋Š” ์‚ฌ๊ณ ๊ณผ์ •์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฑฐ ๊ฐ™๋‹ค.


์•„์ด๋””์–ด

๊ธฐ๋ณธ์ ์œผ๋กœ ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์•ž์ž๋ฆฌ๊ฐ€ ์ปค์•ผ ํ•œ๋‹ค (8xxx < 9xxx)

 

๊ทธ๋Ÿผ ์•ž์ž๋ฆฌ๋ถ€ํ„ฐ ํฐ ์ˆ˜๋ฅผ ๋‘๋ ค๊ณ  ์ƒ๊ฐํ•  ๊ฒƒ์ด๋‹ค. ์•ž์ž๋ฆฌ์— ํฐ ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฑ„์šธ ์ˆ˜ ์žˆ์„๊นŒ?

 

๋ฌธ์ œ์—์„œ ์ˆซ์ž ํ•œ ๊ฐœ๋ฅผ ์ฃผ๊ณ  K๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•ด์„œ ์ตœ๋Œ€๋กœ ๋งŒ๋“ค๋ผ๊ณ  ํ•œ๋‹ค.

 

ํƒ์ƒ‰ ๋ฐฉํ–ฅ์€? ์•ž์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ํƒ์ƒ‰ํ•œ๋‹ค. ๋‘ ์ˆ˜๋ฅผ ๋น„๊ตํ•ด ๊ฐ€๋ฉฐ ์ˆ˜๋ฅผ ๋ฒ„๋ฆด์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

์˜ˆ์ œ์— ์žˆ๋Š” 4177252841์„ ๊ฐ€์ง€๊ณ  ์„ค๋ช…ํ•˜๋ฉด, ๋จผ์ € 4๋ฅผ ๋ฆฌ์ŠคํŠธ์— ๋‹ด์•„์ค€๋‹ค. [4] , k = 4

 

4 ๋‹ค์Œ์€ 1์ด๋‹ˆ๊นŒ 4๋ณด๋‹ค ์ž‘๋‹ค. ๋”ฐ๋ผ์„œ 1๋„ ๋„ฃ์–ด์ค€๋‹ค. [4, 1], k = 4

 

๊ทธ๋‹ค์Œ 7์ด ๋‚˜์™”๋‹ค. 7์€ ์•ž์— 1๋ณด๋‹ค ํฌ๋‹ค. ๊ทธ๋Ÿผ ์•ž์— ๋„ฃ์—ˆ๋˜ ์ˆ˜๋ฅผ ๋นผ๊ณ  ๋„ฃ์–ด์•ผ ํ•œ๋‹ค. 1์„ ๋นผ์ฃผ์ž.

์ˆซ์ž๋ฅผ ํ•œ ๊ฐœ ์ œ์™ธํ–ˆ์œผ๋ฏ€๋กœ k๊ฐ’๋„ ๊ฐ์†Œ์‹œ์ผœ ์ค€๋‹ค. [4], k = 3

 

์ด์ œ 4์™€ ๋น„๊ต๋ฅผ ํ•ด๋ณด์ž. ์—ฌ์ „ํžˆ 7์ด ํฌ๋‹ค. 4๋„ ๋นผ์ฃผ์ž. [], k = 2

์ด์ œ 7์„ ๋„ฃ์–ด์ฃผ์ž. [7] k = 2

 

๊ทธ๋‹ค์Œ ์ˆซ์ž๋Š” ๋˜ 7์ด๋‹ค. ์ˆซ์ž๊ฐ€ ๊ฐ™์œผ๋‹ˆ๊นŒ ๋„ฃ์–ด์ค€๋‹ค. [7, 7] k = 2

์ด ๋ฐฉ์‹๋Œ€๋กœ ์ญ‰ ์ง„ํ–‰ํ•ด ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

 

1. [], k = 4

2. [4], k = 4

3. [4, 1], k = 4

4. [4], k = 3

5. [], k = 2

6. [7], k = 2

7. [7, 7], k = 2

8. [7, 7, 2], k = 2

9. [7, 7], k = 1

10. [7, 7, 5], k = 1

11. [7, 7, 5, 2], k = 1

12. [7, 7, 5], k = 0

13. [7, 7, 5, 8], k = 0

 

k๊ฐ’์ด 0์ด๋ฉด ๋” ์ด์ƒ ์ˆซ์ž๋ฅผ ์ œ์™ธํ•  ์ˆ˜ ์—†๋‹ค. ๋’ค์— ๋‚จ์€ ๊ฑด ๋ถ™์—ฌ์ฃผ์ž.

[7, 7, 5, 8] + [4, 1] = [7, 7, 5, 8, 4, 1]

 

๊ทธ๋ฆฌ๊ณ  ์ด ์ผ€์ด์Šค์—์„œ๋Š” ์—†์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•œ ์ •๋‹ต์˜ ๊ธธ์ด๋ณด๋‹ค ๊ธด ๊ฒฝ์šฐ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

๋ฆฌ์ŠคํŠธ ์Šฌ๋ผ์ด์‹ฑ์œผ๋กœ ์ •๋‹ตํฌ๊ธฐ์— ๋งž๊ฒŒ ์ž˜๋ผ์ฃผ์ž. 

 


์ „์ฒด ์ฝ”๋“œ

def solution(number, k):
    
    answer = ''
    
    num_list = [int(x) for x in list(number)] # ์ˆซ์ž๋ฅผ ํ•œ๊ฐœ์”ฉ ๋‚˜๋ˆ  ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅ
    box = [] # ์ˆซ์ž๋ฅผ ๋‹ด์„ ๋ฆฌ์ŠคํŠธ
    
    num_length = len(number) - k # ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ
    
    for i in range(len(number)):
        while k > 0 and box and box[-1] < num_list[i]: # k > 0, ๋ฆฌ์ŠคํŠธ ์•ˆ ๋น„์–ด์žˆ๊ณ , ์ƒˆ๋กœ์šด ๊ฐ’์ด ํฌ๋ฉด pop์ง„ํ–‰
            box.pop()
            k -= 1
            
        if k == 0: 
            box += num_list[i:] # ๋’ค์— ๋‚จ์€ ์ˆซ์ž๋“ค ๋ถ™์—ฌ์คŒ
            break # k๊ฐ€ 0์ด๋ฉด ๋”์ด์ƒ ์ด ๊ณผ์ •์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋‹ˆ๊นŒ break
        
        box.append(num_list[i]) # ์ˆซ์ž ์ถ”๊ฐ€
        
    if len(box) > num_length: #์ˆซ์ž๋ฅผ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋‹ต๊ธธ์ด๋ณด๋‹ค ๊ธธ๋ฉด ์Šฌ๋ผ์ด์‹ฑ
        box = box[:num_length]
    
    answer = ''.join(map(str,box)) #๋ฆฌ์ŠคํŠธ๋“ค joinํ•จ์ˆ˜๋กœ ํ•ฉ์ณ์คŒ
    
    return answer