250x250
Link
λ‚˜μ˜ GitHub Contribution κ·Έλž˜ν”„
Loading data ...
Notice
Recent Posts
Recent Comments
관리 메뉴

Data Science LAB

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level2 (택배 μƒμž) λ³Έλ¬Έ

πŸ“ Coding Test/Programmers

[Python] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ level2 (택배 μƒμž)

γ…… γ…œ γ…” γ…‡ 2022. 12. 26. 18:21
728x90

1. 문제 μ„€λͺ…

μ˜μž¬λŠ” νƒλ°°μƒμžλ₯Ό νŠΈλŸ­μ— μ‹£λŠ” 일을 ν•©λ‹ˆλ‹€. μ˜μž¬κ°€ μ‹€μ–΄μ•Ό ν•˜λŠ” νƒλ°°μƒμžλŠ” 크기가 λͺ¨λ‘ κ°™μœΌλ©° 1번 μƒμžλΆ€ν„° n번 μƒμžκΉŒμ§€ λ²ˆν˜Έκ°€ μ¦κ°€ν•˜λŠ” μˆœμ„œλŒ€λ‘œ μ»¨ν…Œμ΄λ„ˆ λ²¨νŠΈμ— 일렬둜 놓여 μ˜μž¬μ—κ²Œ μ „λ‹¬λ©λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆ λ²¨νŠΈλŠ” ν•œ λ°©ν–₯으둜만 진행이 κ°€λŠ₯ν•΄μ„œ λ²¨νŠΈμ— 놓인 μˆœμ„œλŒ€λ‘œ(1번 μƒμžλΆ€ν„°) μƒμžλ₯Ό 내릴 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ»¨ν…Œμ΄λ„ˆ λ²¨νŠΈμ— 놓인 μˆœμ„œλŒ€λ‘œ νƒλ°°μƒμžλ₯Ό λ‚΄λ € λ°”λ‘œ νŠΈλŸ­μ— μ‹£κ²Œ 되면 택배 κΈ°μ‚¬λ‹˜μ΄ λ°°λ‹¬ν•˜λŠ” μˆœμ„œμ™€ νƒλ°°μƒμžκ°€ μ‹€λ € μžˆλŠ” μˆœμ„œκ°€ λ§žμ§€ μ•Šμ•„ 배달에 차질이 μƒκΉλ‹ˆλ‹€. λ”°λΌμ„œ 택배 κΈ°μ‚¬λ‹˜μ΄ 미리 μ•Œλ €μ€€ μˆœμ„œμ— 맞게 μ˜μž¬κ°€ νƒλ°°μƒμžλ₯Ό μ‹€μ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ§Œμ•½ μ»¨ν…Œμ΄λ„ˆ 벨트의 맨 μ•žμ— 놓인 μƒμžκ°€ ν˜„μž¬ νŠΈλŸ­μ— μ‹€μ–΄μ•Ό ν•˜λŠ” μˆœμ„œκ°€ μ•„λ‹ˆλΌλ©΄ κ·Έ μƒμžλ₯Ό νŠΈλŸ­μ— 싀을 μˆœμ„œκ°€ 될 λ•ŒκΉŒμ§€ μž μ‹œ λ‹€λ₯Έ 곳에 보관해야 ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 고객의 물건을 ν•¨λΆ€λ‘œ 땅에 λ‘˜ 수 μ—†μ–΄ 보쑰 μ»¨ν…Œμ΄λ„ˆ 벨트λ₯Ό μΆ”κ°€λ‘œ μ„€μΉ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 보쑰 μ»¨ν…Œμ΄λ„ˆ λ²¨νŠΈλŠ” μ•ž λ’€λ‘œ 이동이 κ°€λŠ₯ν•˜μ§€λ§Œ μž…κ΅¬ 외에 λ‹€λ₯Έ 면이 λ§‰ν˜€ μžˆμ–΄μ„œ 맨 μ•žμ˜ μƒμžλ§Œ λΊ„ 수 μžˆμŠ΅λ‹ˆλ‹€(즉, κ°€μž₯ λ§ˆμ§€λ§‰μ— 보쑰 μ»¨ν…Œμ΄λ„ˆ λ²¨νŠΈμ— λ³΄κ΄€ν•œ μƒμžλΆ€ν„° κΊΌλ‚΄κ²Œ λ©λ‹ˆλ‹€). 보쑰 μ»¨ν…Œμ΄λ„ˆ 벨트λ₯Ό μ΄μš©ν•΄λ„ κΈ°μ‚¬λ‹˜μ΄ μ›ν•˜λŠ” μˆœμ„œλŒ€λ‘œ μƒμžλ₯Ό 싣지 λͺ» ν•œλ‹€λ©΄, 더 이상 μƒμžλ₯Ό 싣지 μ•ŠμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ˜μž¬κ°€ 5개의 μƒμžλ₯Ό μ‹€μ–΄μ•Ό ν•˜λ©°, 택배 κΈ°μ‚¬λ‹˜μ΄ μ•Œλ €μ€€ μˆœμ„œκ°€ 기쑴의 μ»¨ν…Œμ΄λ„ˆ λ²¨νŠΈμ— λ„€ 번째, μ„Έ 번째, 첫 번째, 두 번째, λ‹€μ„― 번째 놓인 νƒλ°°μƒμž μˆœμ„œμΈ 경우, μ˜μž¬λŠ” μš°μ„  첫 번째, 두 번째, μ„Έ 번째 μƒμžλ₯Ό 보쑰 μ»¨ν…Œμ΄λ„ˆ λ²¨νŠΈμ— λ³΄κ΄€ν•©λ‹ˆλ‹€. κ·Έ ν›„ λ„€ 번째 μƒμžλ₯Ό νŠΈλŸ­μ— μ‹£κ³  보쑰 μ»¨ν…Œμ΄λ„ˆ λ²¨νŠΈμ—μ„œ μ„Έ 번째 μƒμž λΉΌμ„œ νŠΈλŸ­μ—μ‹£μŠ΅λ‹ˆλ‹€. λ‹€μŒμœΌλ‘œ 첫 번째 μƒμžλ₯Ό μ‹€μ–΄μ•Ό ν•˜μ§€λ§Œ 보쑰 μ»¨ν…Œμ΄λ„ˆ λ²¨νŠΈμ—μ„œλŠ” 두 번째 μƒμžλ₯Ό, 기쑴의 μ»¨ν…Œμ΄λ„ˆ λ²¨νŠΈμ—λŠ” λ‹€μ„― 번째 μƒμžλ₯Ό κΊΌλ‚Ό 수 있기 λ•Œλ¬Έμ— λ”μ΄μƒμ˜ μƒμžλŠ” 싀을 수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ νŠΈλŸ­μ—λŠ” 2개의 μƒμžλ§Œ μ‹€λ¦¬κ²Œ λ©λ‹ˆλ‹€.

택배 κΈ°μ‚¬λ‹˜μ΄ μ›ν•˜λŠ” μƒμž μˆœμ„œλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜ λ°°μ—΄ orderκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, μ˜μž¬κ°€ λͺ‡ 개의 μƒμžλ₯Ό 싀을 수 μžˆλŠ”μ§€ return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ„Έμš”.

 

 

 

 

 

 

2. μ œν•œ 사항

  • 1 ≤ order의 길이 ≤ 1,000,000
  • orderλŠ” 1이상 order의 길이 μ΄ν•˜μ˜ λͺ¨λ“  μ •μˆ˜κ°€ ν•œλ²ˆμ”© λ“±μž₯ν•©λ‹ˆλ‹€.
  • order[i]λŠ” 기쑴의 μ»¨ν…Œμ΄λ„ˆ λ²¨νŠΈμ— order[i]번째 μƒμžλ₯Ό i+1번째둜 νŠΈλŸ­μ— μ‹€μ–΄μ•Ό 함을 μ˜λ―Έν•©λ‹ˆλ‹€.

 

 

 

 

 

 

 

3. λ‚΄ 풀이

def solution(order):
    answer = 0
    box = list(range(1,order[0]+1))
    for idx,i in enumerate(order):
        if len(box) == 0:
            box.append(i)
        if i == box[-1]:
            answer += 1
            box.pop()
        elif i == order[idx-1]+1:
            answer += 1
        elif i < box[-1]:
            return answer
        else:
            answer += 1
            box.extend(list(range(max(order[:idx])+1, i)))
    return answer

 

1. 첫번째 νƒλ°°λŠ” λ°˜λ“œμ‹œ νŠΈλŸ­μ— 싀을 수 μžˆμœΌλ―€λ‘œ box λ¦¬μŠ€νŠΈμ— 1λΆ€ν„° 첫번째 택배 λ²ˆν˜ΈκΉŒμ§€ 리슀트 생성

2. box listκ°€ λΉ„μ–΄ 있으면 μš”μ†Œ μΆ”κ°€

3. κ°€μž₯ λ§ˆμ§€λ§‰μœΌλ‘œ box list에 담은 μš”μ†Œκ°€ i와 κ°™μœΌλ©΄ answer + 1

4. λ˜λŠ” order list에 λ‹΄κΈ΄ μš”μ†Œμ˜ μˆ«μžκ°€ 연속적이면 answer + 1

5. box list의 λ§ˆμ§€λ§‰μ— λ‹΄κΈ΄ μ›μ†Œκ°€ i보닀 크면 answer return (더이상 택배λ₯Ό 싀을 수 μ—†κΈ° λ•Œλ¬Έ)

6. box list의 λ§ˆμ§€λ§‰μ— λ‹΄κΈ΄ μ›μ†Œκ°€ i보닀 μž‘μœΌλ©΄ 이 전에 택배λ₯Ό 싀은 κ°€μž₯ 큰 수+1 λΆ€ν„° iμ „κΉŒμ§€ 택배λ₯Ό box list에 μΆ”κ°€

 

 

 

 

 

 

4. λ‹€λ₯Έ μ‚¬λžŒ 풀이

def solution(order):
    answer = 0
    stacks = []
    N = len(order)
    i = 1
    idx = 0
    while i < N+1:
        stacks.append(i)
        while stacks[-1] == order[idx]:
            idx += 1
            stacks.pop()
            if len(stacks) == 0:
                break
        i += 1


    return idx

 

 

 

 

 

728x90
Comments