[ Code Kata ] 🀯 Python # 10 x, yμΆ•μœΌλ‘œ ꡬ할 수 μžˆλŠ” κ°€μž₯ 넓은 면적은? / max (), min() ν•¨μˆ˜

HaileeΒ·2020λ…„ 12μ›” 11일
0

[ Code Kata ]

λͺ©λ‘ 보기
16/28
post-thumbnail

문제

  • 인자인 heightλŠ” 숫자둜 이루어진 λ°°μ—΄μž…λ‹ˆλ‹€.κ·Έλž˜ν”„λ‘œ μƒκ°ν•œλ‹€λ©΄ yμΆ•μ˜ 값이고,
    높이 값을 κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.
  • μ•„λž˜μ˜ κ·Έλž˜ν”„λΌλ©΄ height 배열은 [1, 8, 6, 2, 5, 4, 8, 3, 7] μž…λ‹ˆλ‹€.
  • μ € κ·Έλž˜ν”„μ— 물을 λ‹΄λŠ”λ‹€κ³  μƒκ°ν•˜κ³ , 물을 담을 수 μžˆλŠ” κ°€μž₯ 넓은 면적의 값을 λ°˜ν™˜ν•΄μ£Όμ„Έμš”.

κ°€μ •

λ°°μ—΄μ˜ κΈΈμ΄λŠ” 2μ΄μƒμž…λ‹ˆλ‹€.

와아 였늘 λ¬Έμ œλŠ” 문제 자체λ₯Ό μ΄ν•΄ν•˜λŠ” 것 λΆ€ν„° ν—€λ§Έλ‹€.
κ²°κ΅­ μ΄ν•΄ν•œ 것은 κ°€μž₯ λ§Žμ€ 양이 λ‹΄κΈΈ 수 μžˆλŠ” 면적을 λ§Œλ“ λ‹€κ³  μƒκ°ν•˜κ³ ,
κ°€μž₯ 넓은 μ˜μ—­μ΄ 될 수 μžˆλ„λ‘ x*y의 값을 κ΅¬ν•΄λ‚΄λŠ” 것!

# 
[1,8,6,2,5,4,8,3,7]		-> 49

[35, 46, 43, 59, 59]		-> 140

λ¬Έμ œλΆ€ν„° 이해가 가지 μ•Šμ•„μ„œ μ˜€λŠ˜λ„ νž˜λ“€μ—ˆλ˜ ν•˜λ£¨... 흑흑
μ†Œμ€‘ν•œ κΈˆμš”μΌμΈλ° μ™œμ΄λ ‡κ²Œ μ–΄λ €μš΄ 문제λ₯Ό λ‚΄μ–΄μ£Όμ‹ κ±°μ£ ...!!! μœ„μ½”λ“œ...!!!!!

μš°μ„ , x μ˜μ—­κ³Ό yμ˜μ—­μ„ κ³±ν–ˆμ„ λ•Œ, κ°€μž₯ 넓은 면적이 λ‚˜μ™€μ•Ό ν•˜λŠ” 것!
κ·ΈλŸ¬λ‹ˆκΉŒ y좕이 κ°€μž₯ 높을 수 μžˆλŠ” xμΆ•μ˜ λ„ˆλΉ„λ₯Ό κ΅¬ν•΄μ„œ κ°€μž₯ 높은 yμΆ•κ³Ό κ³±ν•˜λŠ” 것!!!

for loop λŒλ¦¬λ©΄μ„œ μ°¨λ‘€μ°¨λ‘€ κ³±ν•΄μ„œ 빈 λ¦¬μŠ€νŠΈμ— λ‹΄κ³ 
κ·Έ 쀑 κ°€μž₯ 큰 값을 내보내?
이게 말이 λ˜λ‚˜..?


λ‹€λ₯ΈλΆ„이 ν’€μ–΄λ‚Έ μ½”λ“œ

def get_max_area(height):
  maxs = 0
  for i in range(len(height)):
    for n in range(i + 1, len(height)):
      volume = 0
      v = n - i
      if height[i] <= height[n]:
        volume = height[i] * v
      else:
        volume = height[n] * v
    if volume >= maxs:
      result = maxs
  return result

(μ™„λ²½ν•˜κ²Œ λλ‚œ μ½”λ“œλŠ” μ•„λ‹ˆμ—ˆλ‹€κ³  ν•˜μ§€λ§Œ 이 μ½”λ“œλ‘œ 'ok'κ°€ λœ¨λŠ” κ±Έ ν™•μΈν•˜μ…¨λ‹€κ³  ν–ˆλ˜..)
μš°μ„  xμΆ• λ„ˆλΉ„λ₯Ό λ„“ν˜€κ°€λ©΄μ„œ, μ°¨λ‘€λ‘œ λ“€μ–΄μ˜¨ 숫자만큼 λ°˜λ³΅ν•˜λ˜
κ·Έ μ•ˆμ—μ„œ 또 y좕에 λŒ€ν•œ 값듀을 κ³±ν•΄κ°€λ©΄μ„œ..?

ν—ˆν—ˆν—ˆ....


Model Solution

def get_max_area(height):
	l = 0
	r = len(height) -1
	area = 0
	while l < r: 
		area = max(area, min(height[l],height[r]) * (r - l))
		if height[l] < height[r]: 
			l += 1
		else:
		    r -= 1
	return area

λŒ€λž΅μ μœΌλ‘œ 이해가 κ°ˆλ“― ν•œλ° λͺ¨λ₯΄κ² μœΌλ‹ˆκΉŒ -> ν•œλ§ˆλ””λ‘œ 이해 λͺ»ν•œ 것!

λ‚΄κ°€ μƒκ°ν–ˆλ˜ λŒ€λ‘œ μš°μ„  κ΅¬ν˜„μ„ ν•΄ 보고, κ·Έ λ‹€μŒμ— λͺ¨λΈ μ†”λ£¨μ…˜μ„ λ‹€μ‹œ 봐야 ν•  것 κ°™λ‹€.. 🀯


λ‚΄κ°€ λͺ¨λΈ μ†”λ£¨μ…˜μ„ μ΄ν•΄ν•˜μ§€ λͺ»ν•˜λŠ” 주된 μ΄μœ μ€‘ ν•˜λ‚˜κ°€ max( ), min( )ν•¨μˆ˜μ— λŒ€ν•œ 이해가 λΆ€μ‘±ν•˜κΈ° λ•Œλ¬ΈμΈ 것 κ°™λ‹€.

1. Min ν•¨μˆ˜

1-1. min ν•¨μˆ˜λž€?

min(x)은 인수둜 받은 μžλ£Œν˜• λ‚΄μ—μ„œ μ΅œμ†Œκ°’μ„ μ°Ύμ•„μ„œ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ©°
xμ—λŠ” 반볡이 κ°€λŠ₯ν•œ 데이터 νƒ€μž…, 즉 iterable ν•œ μžλ£Œν˜•μ΄ λ“€μ–΄κ°€μ•Όν•œλ‹€.(λ¬Έμžμ—΄, 리슀트, νŠœν”Œ λ“±)

min(iterable, *[, default=obj, key=func]) -> value

μš°μ„  λ’€μ˜ λ§€κ°œλ³€μˆ˜λŠ” μƒκ°ν•˜μ§€ 말고, iterable만 확인!
min ν•¨μˆ˜λ₯Ό μ •λ¦¬ν•΄λ³΄μžλ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

  • κΈ°λ³Έν˜• : min(iterable)
  • λ§€κ°œλ³€μˆ˜ : 반볡이 κ°€λŠ₯ν•œ μžλ£Œν˜•
  • λ°˜ν™˜ν˜• : λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄μ˜¨ 인자 λ‚΄λΆ€μ—μ„œ 제일 μž‘μ€ 값을 λ°˜ν™˜

κ·Έλ ‡λ‹€λ©΄ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μ˜ μ›ν˜•μ€?
def min(*args, key=None):
: *argsλŠ” κ°€λ³€μΈμžλ₯Ό λœ»ν•¨μœΌλ‘œ μ—¬λŸ¬κ°œμ˜ μΈμžκ°€ λ“€μ–΄κ°ˆ 수 μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ•„λž˜μ™€ 같은것도 κ°€λŠ₯ν•˜λ‹€.

min(arg1, arg2, args, [, key=func]) -> value

리슀트 N개λ₯Ό 비ꡐ할 수 μžˆλ‹€λŠ” 뜻!

  • μ‘μš©ν˜• : min(iterable1, iterable2, ...)
  • λ§€κ°œλ³€μˆ˜ : 반볡이 κ°€λŠ₯ν•œ μžλ£Œν˜• 'λ“€'
  • λ°˜ν™˜ν˜• : λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄μ˜¨ 반볡이 κ°€λŠ₯ν•œ μΈμžλ“€ 쀑에 κ°€μž₯ μž‘μ€ 인자(덩어리)을 λ°˜ν™˜
    πŸ‘‰πŸ» μ—¬κΈ°μ„œ λ°˜ν™˜ν˜•μ€ iterable1내뢀에 κ°€μž₯ μž‘μ€ 값이 μ•„λ‹ˆλΌ, iterable1 κ³Ό iterable2 쀑에 μž‘μ€κ±Έ λ°˜ν™˜ν•œλ‹€λŠ” 뜻

좜처: https://blockdmask.tistory.com/411 [개발자 지망생]

1-1. min(iterable) ν•¨μˆ˜ 예제

# ========================================================= 
# min(iterable) ν•¨μˆ˜ 예제1 : 리슀트 이용 
a = [1, 2, 3] 
print(min(a)) # λ°˜ν™˜ : 1 

# ========================================================= 
# min(iterable) ν•¨μˆ˜ 예제2 : λ¬Έμžμ—΄ 이용 
b = 'BlockDMask' 
print(min(b)) # λ°˜ν™˜ : 'B' 

# ========================================================= 
# min(iterable) ν•¨μˆ˜ 예제3 : non iterable 인 경우 
c = 1  
print(min(c)) # error : 'int' object is not iterable 

# ========================================================= 
# min(iterable) ν•¨μˆ˜ 예제4 : νŠœν”Œ 이용 
d = (6, 5, 4, 2) 
print(min(d)) # λ°˜ν™˜ : 2 

# ========================================================= 
# min(iterable) ν•¨μˆ˜ 예제5 : 리슀트 이용2 
e = [3, 4, 5, 'a', 'b', 'c'] 
print(min(e)) # error : str νƒ€μž…κ³Ό int νƒ€μž…μ€ 비ꡐ할 수 μ—†κΈ° λ•Œλ¬Έ

1-1. min(arg1, arg2) ν•¨μˆ˜ 예제

# ========================================================= 
# min(arg1, arg2) ν•¨μˆ˜ 예제1 : 리슀트 
a = [1, 2, 3] 
b = [4, 5, 6] 
print(min(a, b)) # λ°˜ν™˜ : [1,2,3] 

# ========================================================= 
# min(arg1, arg2) ν•¨μˆ˜ 예제2 : λ¬Έμžμ—΄ 
c = 'BlockDMask' 
d = 'BAAAlockDMask' 
print(min(c, d)) # λ°˜ν™˜ : 'B' 

# ========================================================= 
# min(arg1, arg2) ν•¨μˆ˜ 예제3 : νƒ€μž…μ΄ λ‹€λ₯Έ 경우 
e = [3, 2, 1] 
f = ['a', 3, 2, 1] 
print(min(e, f)) # error # TypeError: '<' not supported between instances of 'str' and 'int' 

# ========================================================= 
# min(arg1, arg2, ...) ν•¨μˆ˜ 예제4 : μΈμžκ°€ N 개 
g = [2, 3, 4] 
h = [2, 2, 2, 2, 2] 
i = [9, 8, 7, 6, 5] 
j = [1] 
k = [0] 
print(min(g, h, i, j, k)) # λ°˜ν™˜ : [0]

2. Max ν•¨μˆ˜

2-1. max ν•¨μˆ˜λž€?

min ν•¨μˆ˜μ™€ λ˜‘κ°™μ΄ iterable 데이터 νƒ€μž…μ„ 인자둜 λ°›μ•„μ„œ 그쀑 κ°€μž₯ 값이 큰 것을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ©°, λ§€κ°œλ³€μˆ˜λ₯Ό μ—¬λŸ¬κ°œ λ°›λŠ” ν˜•νƒœλ„ μ‘΄μž¬ν•©λ‹ˆλ‹€.

maxν•¨μˆ˜μ˜ κΈ°λ³Έν˜•

max(iterable, *[, default=obj, key=func]) -> value

  • κΈ°λ³Έν˜• : max(iterable)
  • λ§€κ°œλ³€μˆ˜ : 반볡이 κ°€λŠ₯ν•œ μžλ£Œν˜•
  • λ°˜ν™˜ν˜• : λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄μ˜¨ 인자 λ‚΄λΆ€μ—μ„œ 제일 큰 값을 λ°˜ν™˜

max(arg1, arg2, args, [, key=func]) -> value

  • μ‘μš©ν˜• : max(iterable1, iterable2, ...)
  • λ§€κ°œλ³€μˆ˜ : 반볡이 κ°€λŠ₯ν•œ μžλ£Œν˜• 'λ“€'
  • λ°˜ν™˜ν˜• : λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄μ˜¨ 반볡이 κ°€λŠ₯ν•œ μΈμžλ“€ 쀑에 κ°€μž₯ 큰 데이터λ₯Ό λ°˜ν™˜

2-1. max(iterable) ν•¨μˆ˜ 예제

# =========================================================
# max(iterable) ν•¨μˆ˜ 예제1 : 리슀트 이용
a = [4, 3, 2, 1, 9]
print(max(a))  # λ°˜ν™˜ : 9

# =========================================================
# max(iterable) ν•¨μˆ˜ 예제2 : λ¬Έμžμ—΄ 이용
b = 'BlockDMask'
print(max(b))  # λ°˜ν™˜ : 's'

# =========================================================
# max(iterable) ν•¨μˆ˜ 예제3 : νŠœν”Œ 이용
d = (6, 5, 4, 2, 999, 1000, 0)
print(max(d))  # λ°˜ν™˜ : 1000

2-1. max(arg1, arg2) ν•¨μˆ˜ 예제

# =========================================================
# max(arg1, arg2) ν•¨μˆ˜ 예제1 : 리슀트
a = [1, 2, 3]
b = [4, 5, 6]
print(max(a, b))  # λ°˜ν™˜ : [1,2,3]

# =========================================================
# max(arg1, arg2) ν•¨μˆ˜ 예제2 : λ¬Έμžμ—΄
c = 'BlockDMask'
d = 'Blog'
print(max(c, d))  # λ°˜ν™˜ : 'Blog'

# =========================================================
# max(arg1, arg2, ...) ν•¨μˆ˜ 예제4 : μΈμžκ°€ M 개
e1 = [2, 3, 4]
e2 = [2, 2, 2, 2, 2]
e3 = [9, 8, 7, 6, 5]
e4 = [1]
e5 = [0]
print(max(e1, e2, e3, e4, e5))  # λ°˜ν™˜ : [9, 8, 7, 6, 5]

[python] maxν•¨μˆ˜ , min ν•¨μˆ˜

profile
μ›Ή 개발 πŸ·πŸ˜ŽπŸ‘ŠπŸ»πŸ”₯

0개의 λŒ“κΈ€