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

Algorithm/Programmers

[Programmers] ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ

 

๋ฌธ์ œ 

 

์–ด๋–ค ์ˆซ์ž์—์„œ k๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž 1924์—์„œ ์ˆ˜ ๋‘ ๊ฐœ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด [19, 12, 14, 92, 94, 24] ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋Š” 94 ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ์ˆซ์ž number์™€ ์ œ๊ฑฐํ•  ์ˆ˜์˜ ๊ฐœ์ˆ˜ k๊ฐ€ solution ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. number์—์„œ k ๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

 

 

 

์ œํ•œ ์กฐ๊ฑด 

 

  • number๋Š” 2์ž๋ฆฌ ์ด์ƒ, 1,000,000์ž๋ฆฌ ์ดํ•˜์ธ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.
  • k๋Š” 1 ์ด์ƒ number์˜ ์ž๋ฆฟ์ˆ˜ ๋ฏธ๋งŒ์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ 

 

number k return
"1924" 2 "94"
"1231234" 3 "3234"
"4177252841" 4 "775841"

 

 

๋‚˜์˜ ์ฝ”๋“œ ๋ฐ ์ ‘๊ทผ ๋ฐฉ์‹  
def solution(number, k):
    p = len(number) - k
    array = []
    print(p)
    number = list(map(int,number))
    print(number)
    while True:
        if number[0] > number[1]:
            number.pop(1)
        elif number[0] < number[1]:
            number.pop(0)
        elif number[0] == number[1]:
            number[0] = number[number.count(number[0])]
        if len(number) == p:
            break
    
    return ''.join(map(str, number))
๋ถ„์„ > ์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ ๋ดค์„ ๋•Œ ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ž˜ ์•ˆํ’€๋ ค์„œ ๋‹นํ™ฉํ–ˆ์—ˆ๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ number ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ p๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ์™€ ๋‘๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋น„๊ตํ•˜๋ฉด์„œ ์ ์€ ์ˆ˜๋ฅผ popํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋น„๊ตํ•˜๋Š” ์›์†Œ๋“ค์ด ๊ฐ™์€ ์ˆ˜์ผ ๋•Œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 3๋ฒˆ์˜ ๊ฒฝ์šฐ ์›ํ•˜๋Š” ๋‹ต์ด ๋‚˜์˜ค์ง€ ๋ชปํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ๊ผฌ์ด๊ณ  ๋ง์•˜๋‹ค. 

 

 

ํ•ด์„ค ์ฝ”๋“œ 
def solution(number, k):
    answer = []
    for num in number:
        # answer์— ๊ฐ’์ด ์กด์žฌํ•˜๋ฉฐ, k๋Š” 0๋ณด๋‹ค ํฌ๊ณ , answer์˜ ์ตœ๊ทผ ๊ฐ’์ด ํ˜„์žฌ์˜ num๋ณด๋‹ค ์ž‘์œผ๋ฉด
        while answer and k > 0 and answer[-1] < num:
            # answer์˜ ์ตœ๊ทผ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ  k๋„ -1 ํ•ด์ค€๋‹ค
            answer.pop()
            k -= 1
        # ํ˜„์žฌ์˜ num๊ฐ’์€ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ answer์— ๋„ฃ์–ด์ค€๋‹ค
        answer.append(num)
    
    # answer๋Š” number์˜ ๊ธธ์ด - k๋งŒํผ ์Šฌ๋ผ์ด์‹ฑ ํ•ด์ค€๋‹ค.
    # -> ์Šฌ๋ผ์ด์‹ฑ์€ index ๋ฐ”๊นฅ์œผ๋กœ ๋‚˜๊ฐ€๋„ ๊ดœ์ฐฎ์Œ! 
    # ์ผ๋ฐ˜์ ์œผ๋กœ k๋Š” 0์ผํ…๋ฐ ex) k = 3 number = 1000000 ์ด๋Ÿฐ ๊ฒฝ์šฐ์—” k๋Š” ์ฒ˜์Œ ์ธํ’‹๋ฐ›์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋จ
    # ์ด๋Ÿด ๋•Œ ๋‹ต์€ ๋’ท ์ˆซ์ž๋ฅผ k๊ฐœ๋งŒํผ ์—†์• ์ค€ 1000 ์ด๋ฏ€๋กœ ์Šฌ๋ผ์ด์‹ฑ์„ len(number) - k๋กœ ํ•ด์ฃผ๋Š” ๊ฒƒ
    answer = ''.join(answer[:len(number)-k])
    
    return answer
๋ถ„์„ > ์šฐ์„  ๋นˆ ๋ฐฐ์—ด์˜ answer ์Šคํƒ์„ ๋งŒ๋“  ํ›„์— answer ๊ฐ’์ด ์กด์žฌํ•˜๋ฉฐ k๋Š” 0๋ณด๋‹ค ํฌ๊ณ  answer์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ๊ฐ’์ด ํ˜„์žฌ num๋ณด๋‹ค ์ž‘์„ ๋•Œ answer์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ๊ฐ’์„ popํ•œ ํ›„ ์ตœ์ข… popํ•œ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” k์—์„œ 1์„ ๋นผ๊ฐ€๋ฉฐ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค. ๊ทธ๋ฆฌ๊ณ  num๊ฐ’์€ ๊ณ„์† appendํ•˜์—ฌ answer[-1]๊ฐ’๊ณผ ๊ณ„์† ๋น„๊ตํ•œ๋‹ค. ์ตœ์ข… ์ถœ๋ ฅ๊ฐ’์€ number ๊ฐ’์ด 1000000 ์ด๊ณ  k = 3 ์ธ ๊ฒฝ์šฐ 1000์ด๋ผ๋Š” ๊ฐ’์„ ์ œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด len(number) - k ๋กœ ์Šฌ๋ผ์ด์‹ฑ ํ•ด์ฃผ์–ด ์ถœ๋ ฅํ•œ๋‹ค.