[Algorithm][Programmers] 탑

yurimΒ·2020λ…„ 5μ›” 29일
0

programmers-algorithm

λͺ©λ‘ 보기
1/2
post-thumbnail

πŸ‘‡λ¬Έμ œ λ§ν¬πŸ‘‡
ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€-탑

문제

μˆ˜ν‰ 직선에 탑 NλŒ€λ₯Ό μ„Έμ› μŠ΅λ‹ˆλ‹€. λͺ¨λ“  νƒ‘μ˜ κΌ­λŒ€κΈ°μ—λŠ” μ‹ ν˜Έλ₯Ό 솑/μˆ˜μ‹ ν•˜λŠ” μž₯치λ₯Ό μ„€μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€. λ°œμ‚¬ν•œ μ‹ ν˜ΈλŠ” μ‹ ν˜Έλ₯Ό 보낸 탑보닀 높은 νƒ‘μ—μ„œλ§Œ μˆ˜μ‹ ν•©λ‹ˆλ‹€. λ˜ν•œ, ν•œ 번 μˆ˜μ‹ λœ μ‹ ν˜ΈλŠ” λ‹€λ₯Έ νƒ‘μœΌλ‘œ μ†‘μ‹ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ 높이가 6, 9, 5, 7, 4인 λ‹€μ„― 탑이 μ™Όμͺ½μœΌλ‘œ λ™μ‹œμ— λ ˆμ΄μ € μ‹ ν˜Έλ₯Ό λ°œμ‚¬ν•©λ‹ˆλ‹€. 그러면, 탑은 λ‹€μŒκ³Ό 같이 μ‹ ν˜Έλ₯Ό μ£Όκ³ λ°›μŠ΅λ‹ˆλ‹€. 높이가 4인 λ‹€μ„― 번째 νƒ‘μ—μ„œ λ°œμ‚¬ν•œ μ‹ ν˜ΈλŠ” 높이가 7인 λ„€ 번째 탑이 μˆ˜μ‹ ν•˜κ³ , 높이가 7인 λ„€ 번째 νƒ‘μ˜ μ‹ ν˜ΈλŠ” 높이가 9인 두 번째 탑이, 높이가 5인 μ„Έ 번째 νƒ‘μ˜ μ‹ ν˜Έλ„ 높이가 9인 두 번째 탑이 μˆ˜μ‹ ν•©λ‹ˆλ‹€. 높이가 9인 두 번째 탑과 높이가 6인 첫 번째 탑이 보낸 λ ˆμ΄μ € μ‹ ν˜ΈλŠ” μ–΄λ–€ νƒ‘μ—μ„œλ„ μˆ˜μ‹ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

솑신 탑(높이)μˆ˜μ‹  탑(높이)
5(4)4(7)
4(7)2(9)
3(5)2(9)
2(9)-
1(6)-

맨 μ™Όμͺ½λΆ€ν„° μˆœμ„œλŒ€λ‘œ νƒ‘μ˜ 높이λ₯Ό 담은 λ°°μ—΄ heightsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ 각 탑이 쏜 μ‹ ν˜Έλ₯Ό μ–΄λŠ νƒ‘μ—μ„œ λ°›μ•˜λŠ”μ§€ κΈ°λ‘ν•œ 배열을 return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • heightsλŠ” 길이 2 이상 100 μ΄ν•˜μΈ μ •μˆ˜ λ°°μ—΄μž…λ‹ˆλ‹€.
  • λͺ¨λ“  νƒ‘μ˜ λ†’μ΄λŠ” 1 이상 100 μ΄ν•˜μž…λ‹ˆλ‹€.
  • μ‹ ν˜Έλ₯Ό μˆ˜μ‹ ν•˜λŠ” 탑이 μ—†μœΌλ©΄ 0으둜 ν‘œμ‹œν•©λ‹ˆλ‹€.

μž…μΆœλ ₯예

μž…μΆœλ ₯ 예

heightsreturn
[6,9,5,7,4][0,0,2,2,4]
[3,9,9,3,5,7,2][0,0,0,3,3,3,6]
[1,5,3,6,7,6,5][0,0,2,0,0,5,6]

πŸ’‘ λ¬Έμ œμš”μ•½

  • 일렬둜 μ„Έμ›Œμ§„ νƒ‘μ—μ„œ μ™Όμͺ½μœΌλ‘œ λ ˆμ΄μ €λ₯Ό 보낸닀
  • λ ˆμ΄μ €λ₯Ό 쏜 탑보닀 높은 첫번째 탑이 κ·Έ μ‹ ν˜Έλ₯Ό λ°›λŠ”λ‹€.
  • 맨 μ™Όμͺ½μ— μžˆλŠ” 탑이 쏜 μ‹ ν˜ΈλŠ” 아무도 λͺ»λ°›λŠ”λ‹€.

πŸ’‘ λ¬Έμ œν•΄κ²°

  • μŠ€νƒμ˜ κ°œλ…μœΌλ‘œ LIFOλ₯Ό ν™œμš©ν•œλ‹€.
  • 맨 μ™Όμͺ½ νƒ‘μ˜ 높이λ₯Ό popν•˜κ³  λμ—μ„œλΆ€ν„° λΉ„κ΅ν•˜λ©΄μ„œ λ§Œλ‚˜λŠ” 높은 νƒ‘μ˜ μœ„μΉ˜λ₯Ό λ°˜ν™˜

πŸ’» Code


def soultion(heights):
	//탑 개수만큼의 answer 배열을 0으둜 미리 λ§Œλ“€μ–΄ λ†“λŠ”λ‹€.
    answer = [0 for _ in range(len(heights))]
    
    //heights μ•ˆμ— 값이 μ‘΄μž¬ν•˜λŠ” λ™μ•ˆμ—
    while heights:
        l = len(heights) - 1
        // heights의 맨 였λ₯Έμͺ½ 값을 popν•œλ‹€.
        x = heights.pop()
		
        //(len(heights)-1 λΆ€ν„° 0κΉŒμ§€ -1μ”© κ°μ†Œν•˜λ©΄μ„œ)
        for i in range(len(heights) - 1, -1, -1):
            if heights[i] > x:
                answer[l] = i + 1
                break

    return answer

πŸ’‘ ν›„κΈ°

πŸ™‚

μ•žμœΌλ‘œ μ—΄μ‹¬νžˆ κΈ°λ‘ν•˜λŠ”κ²Œ μ €μ˜ λͺ©ν‘œμž…λ‹ˆλ‹ΉπŸ‘

profile
λ‹­λ°œλ¨Ήκ³  νž˜λ‚΄μ„œ λ³΅μŠ΅ν•˜μžπŸ‘»

0개의 λŒ“κΈ€