[ Code Kata ] 🀯 python #16 μ–‘μˆ˜λ₯Ό μ΄μ§„λ²•μœΌλ‘œ λ°”κΎΌ λ’€ κ°€μž₯ 큰 0의 연속을 λ¦¬ν„΄ν•˜κΈ° / μˆ«μžκ΄€λ ¨ λ‚΄μž₯ν•¨μˆ˜ / strip( )

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

[ Code Kata ]

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

문제

μ–‘μˆ˜ N을 μ΄μ§„λ²•μœΌλ‘œ 바꿨을 λ•Œ, μ—°μ†μœΌλ‘œ μ΄μ–΄μ§€λŠ” 0 μ€‘μ—μ„œ κ°€μž₯ 큰 값을 returnν•΄ μ£Όμ„Έμš”.

  • μ΄μ–΄μ§€λŠ” 0은 1κ³Ό 1사이에 μžˆλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
    이런 것을 binary gap 이라고 ν•©λ‹ˆλ‹€.
    예λ₯Ό λ“€μ–΄,
input: 9
output: 2
μ„€λͺ…: 9의 μ΄μ§„μˆ˜λŠ” 1001 μž…λ‹ˆλ‹€. 
1κ³Ό 1사이에 μžˆλŠ” 0은 2 μ΄λ―€λ‘œ, 2λ₯Ό return
-
input: 9
output: 2
μ„€λͺ…: 9의 μ΄μ§„μˆ˜λŠ” 1001 μž…λ‹ˆλ‹€. 
1κ³Ό 1사이에 μžˆλŠ” 0은 2 μ΄λ―€λ‘œ, 2λ₯Ό return
-
input: 529
output: 4
μ„€λͺ…: 529의 μ΄μ§„μˆ˜λŠ” 1000010001 μž…λ‹ˆλ‹€. 
1κ³Ό 1사이에 μžˆλŠ” μ—°μ†λœ 0의 μˆ˜λŠ” 4와 3μž…λ‹ˆλ‹€.
이 쀑 큰 값은 4μ΄λ―€λ‘œ 4λ₯Ό return
-
input: 529
output: 4
μ„€λͺ…: 529의 μ΄μ§„μˆ˜λŠ” 1000010001 μž…λ‹ˆλ‹€. 
1κ³Ό 1사이에 μžˆλŠ” μ—°μ†λœ 0의 μˆ˜λŠ” 4와 3μž…λ‹ˆλ‹€.
이 쀑 큰 값은 4μ΄λ―€λ‘œ 4λ₯Ό return
-
input: 20
output: 1
μ„€λͺ…: 20의 μ΄μ§„μˆ˜λŠ” 10100 μž…λ‹ˆλ‹€. 
1κ³Ό 1사이에 μžˆλŠ” μ—°μ†λœ 0의 μˆ˜λŠ” 1 λΏμž…λ‹ˆλ‹€.
(뒀에 μžˆλŠ” 0은 1사이에 μžˆλŠ” 것이 μ•„λ‹ˆλ―€λ‘œ)
-
input: 20
output: 1
μ„€λͺ…: 20의 μ΄μ§„μˆ˜λŠ” 10100 μž…λ‹ˆλ‹€. 
1κ³Ό 1사이에 μžˆλŠ” μ—°μ†λœ 0의 μˆ˜λŠ” 1 λΏμž…λ‹ˆλ‹€.
(뒀에 μžˆλŠ” 0은 1사이에 μžˆλŠ” 것이 μ•„λ‹ˆλ―€λ‘œ)
-
input: 15
output: 0
μ„€λͺ…: 15의 μ΄μ§„μˆ˜λŠ” 1111 μž…λ‹ˆλ‹€. 
1κ³Ό 1사이에 μžˆλŠ” 0이 μ—†μœΌλ―€λ‘œ 0을 return
-
input: 15
output: 0
μ„€λͺ…: 15의 μ΄μ§„μˆ˜λŠ” 1111 μž…λ‹ˆλ‹€. 
1κ³Ό 1사이에 μžˆλŠ” 0이 μ—†μœΌλ―€λ‘œ 0을 return
-
input: 32
output: 0
μ„€λͺ…: 32의 μ΄μ§„μˆ˜λŠ” 100000 μž…λ‹ˆλ‹€. 
1κ³Ό 1사이에 μžˆλŠ” 0이 μ—†μœΌλ―€λ‘œ 0을 return
-
input: 32
output: 0
μ„€λͺ…: 32의 μ΄μ§„μˆ˜λŠ” 100000 μž…λ‹ˆλ‹€. 
1κ³Ό 1사이에 μžˆλŠ” 0이 μ—†μœΌλ―€λ‘œ 0을 return
-------------------------------------
nums: 숫자 λ°°μ—΄
target: 두 수λ₯Ό λ”ν•΄μ„œ λ‚˜μ˜¬ 수 μžˆλŠ” 합계
return: 두 수의 indexλ₯Ό 가진 숫자 λ°°μ—΄

μ˜€λŠ˜λ„ μ—­μ‹œλ‚˜ μƒˆλ‘œμš΄ μ „κ°œμ˜ μ½”λ“œ 카타!
μ „ν˜€ 감이 μ˜€μ§€λ₯Ό μ•Šμ•„μ„œ + λ‚΄κ°€ μ•½ν•œ μˆ˜ν•™ κ°œλ…μ„ μ΄ν•΄ν•΄μ•Όν•΄μ„œ
μš°μ„  이 λΈ”λ‘œκ·Έλ₯Ό μ°Έκ³ ν•˜λ©° bin() λ‚΄μž₯ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄λ³΄λ €κ³  ν–ˆλŠ”λ° πŸ‘‰πŸ» 2μ§„μˆ˜, 8μ§„μˆ˜, 10μ§„μˆ˜, 16μ§„μˆ˜ λ³€ν™˜ν•˜κΈ°

였늘의 μ½”λ“œμΉ΄νƒ€λŠ” 'λͺ¨μ—¬μ„œν•¨κ»˜μ½”λ”©'μ΄μ—ˆλ˜ λ°”λžŒμ— 문제λ₯Ό ν’€μ–΄λ³Ό 수 μ—†μ—ˆλ‹€ ν•˜ν•˜ν•˜ν•³
(repl.itλ¬Έμ œμ˜€λ˜κ±΄μ§€.. 닀같이 λ™μ‹œμ— 같은 화면을 두고 문제λ₯Ό ν‘ΈλŠ” 상황..
이걸 λͺ¨λ₯΄κ³  λ‹€λ₯Έ μ‚¬λžŒμ΄ ν‘Ό μ½”λ“œλ₯Ό μ‹Ή μ§€μ›Œλ²„λ¦° λ‚˜μƒˆκΈ°... )

κ·Έλž˜μ„œ λŒ€κ°• μƒκ°λ§Œ 해두고 model solution 보러 κ°”λ‹€... ν•˜ν•³...


model solution

def solution(N):
  binaryNumber = format(N, 'b')
  maximum = 0
  binaryNumberList = binaryNumber.strip('0').split('1')
  
  for x in binaryNumberList:
    if not x:
      continue
    if len(x) > maximum:
      maximum = len(x)
      
  return maximum
  
print(solution(3243))

μ—­μ‹œλ‚˜ μ˜ˆμƒν–ˆλ˜λŒ€λ‘œ μž…λ ₯받은 숫자λ₯Ό λ‚΄μž₯ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ μ§„ν–‰ν–ˆλ˜ 것!!
but λ‚΄κ°€ μ˜ˆμƒν–ˆλ˜ bin( )ν•¨μˆ˜κ°€ μ•„λ‹Œ, format( )ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ ν’€μ–΄λƒˆλ‹€.

μ˜€λŠ˜λ„ μ—­μ‹œλ‚˜ λ‚΄μž₯ν•¨μˆ˜λ₯Ό λͺ°λžλ˜ λ‚˜λ₯Ό μœ„ν•œ μ •λ¦¬μ˜ μ‹œκ°„! κΌ¬-


숫자 κ΄€λ ¨ λ‚΄μž₯ν•¨μˆ˜

νŒŒμ΄μ¬μ€ κΈ°λ³Έ 10μ§„μˆ˜μ΄κΈ° λ•Œλ¬Έμ—, λ‹€λ₯Έ μ§„μˆ˜λŠ” 접두어가 λΆ™λŠ”λ‹€κ³  ν•œλ‹€.

  • 2μ§„μˆ˜ : 0b
  • 8μ§„μˆ˜ : 0o
  • 16μ§„μˆ˜ : 0x

10μ§„μˆ˜μ—μ„œ 2, 8, 16μ§„μˆ˜ λ³€ν™˜ν•˜κΈ° κ³Όμ •μ—μ„œ 쓰일 수 μžˆλŠ” 숫자 κ΄€λ ¨ λ‚΄μž₯ν•¨μˆ˜λ“€ μ •λ¦¬ν•˜κΈ°!

1) bin(), oct(), hex()

  • bin(), oct(), hex() λ‚΄μž₯ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€
value = 60

b = bin(value)
o = oct(value)
h = hex(value)

print(b)   --> # 0b111100
print(o)   --> # 0o74
print(h)   --> # 0x3c

κ²°κ³ΌλŠ” λͺ¨λ‘ λ¬Έμžμ—΄ νƒ€μž…μœΌλ‘œ λ°˜ν™˜λœλ‹€κ³  ν•œλ‹€.

2) format()

value = 60

b = format(value, '#b')
o = format(value, '#o')
h = format(value, '#h')

print(b)   --> # 0b111100
print(o)   --> # 0o74
print(h)   --> # 0x3c

μ΄λ ‡κ²Œ 좜λ ₯ν•˜λ©΄ 1번의 κ²½μš°μ™€ λ˜‘κ°™μ΄ λ¬Έμžμ—΄λ‘œ 좜λ ₯이 되고,

value = 60

b = format(value, 'b')
o = format(value, 'o')
h = format(value, 'h')

print(b)   --> # 111100
print(o)   --> # 74
print(h)   --> # 3c

λ‘λ²ˆμ§Έ μΈμžμ—μ„œ #을 μ œκ±°ν•˜λ©΄ 접두어가 빠진 κ²°κ³Όκ°€ 좜λ ₯λœλ‹€. (λ³€ν™˜λœ κ°’ κ·Έ 자체만 ν•„μš”ν•œ 경우 μ‚¬μš©)

3-1) λ‹€λ₯Έ μ§„μˆ˜ ν˜•νƒœμ—μ„œ 10μ§„μˆ˜λ‘œ λ³€ν™˜

2, 8, 16μ§„μˆ˜μ—μ„œ 10μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” 방법!
λ³€ν™˜ν•˜κ³ μž ν•˜λŠ” μ§„μˆ˜μ˜ νƒ€μž…μ€ λ¬Έμžμ—΄μ΄λ©°, λ°˜ν™˜λ˜λŠ” 10μ§„μˆ˜λŠ” μ •μˆ˜νƒ€μž…μœΌλ‘œ λ¦¬ν„΄λœλ‹€.

b = int('0b111100'	, 2)
o = int('0o74'		, 8)
h = int('0x3c'		, 16)

print(b)   --> # 60
print(o)   --> # 60
print(h)   --> # 60

int()ν•¨μˆ˜μ˜ 첫번째 μΈμžλŠ” λ³€ν™˜ν•˜κ³ μž ν•˜λŠ” μ§„μˆ˜, λ‘λ²ˆμ§Έ μΈμžλŠ” 첫번째 인자의 μ§„μˆ˜ ν˜•νƒœ!
(λ‘λ²ˆμ§Έ μΈμžμ— λ“€μ–΄κ°ˆ μ§„μˆ˜ ν˜•νƒœλ₯Ό 잘λͺ» μž…λ ₯ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€)

3-2) λ‹€λ₯Έ μ§„μˆ˜ ν˜•νƒœμ—μ„œ λ‹€λ₯Έ μ§„μˆ˜λ‘œ λ³€ν™˜

2μ§„μˆ˜μ—μ„œ 8μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” 것과 같이 λ³€ν™˜ν•˜λŠ” 방법.
λ³€ν™˜ν•˜κ³ μž ν•˜λŠ” μ§„μˆ˜μ˜ νƒ€μž…μ€ μ •μˆ˜μ΄λ©°, λ°˜ν™˜λ˜λŠ” νƒ€μž…μ€ λ¬Έμžμ—΄μ΄λ‹€. (3-1의 κ²½μš°μ™€ λ°˜λŒ€!)

o = oct(0b111100)
h = hex(0b111100)
s = str(0b111100)

print(o)   --> # 0o74
print(h)   --> # 0x3c
print(s)   --> # 60

4) λ¬Έμžμ—΄.format()을 μ‚¬μš©ν•œ μ§„μˆ˜ λ³€ν™˜

λ¬Έμžμ—΄μ—μ„œ μ œκ³΅ν•˜λŠ” format() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ λ³€ν™˜ν•˜λŠ” 방법!

s = "2μ§„μˆ˜:{0:#b}, 8μ§„μˆ˜:{0:#o}, 10μ§„μˆ˜:{0:#d}, 16μ§„μˆ˜:{0:#x}".format(60)

print(s)   --> # 2μ§„μˆ˜: 0b111100, 8μ§„μˆ˜: 0o74, 10μ§„μˆ˜: 60, 16μ§„μˆ˜: 0x3c

μ—¬κΈ°μ„œλ„ μœ„μ˜ κ²½μš°μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ #을 μ œκ±°ν•˜λ©΄ 접두어가 빠진 ν˜•νƒœλ‘œ λ°˜ν™˜λœλ‹€.

s = "2μ§„μˆ˜:{0:b}, 8μ§„μˆ˜:{0:o}, 10μ§„μˆ˜:{0:d}, 16μ§„μˆ˜:{0:x}".format(60)

print(s)   --> # 2μ§„μˆ˜: 111100, 8μ§„μˆ˜: 74, 10μ§„μˆ˜: 60, 16μ§„μˆ˜: 3c

λ¬Έμžμ—΄ κ΄€λ ¨ λ‚΄μž₯ν•¨μˆ˜

model solution을 보면, 1을 κΈ°μ€€μœΌλ‘œ split()ν•˜κ³ , κ·Έ 이전에 strip()μ΄λΌλŠ” ν•¨μˆ˜κ°€ λ‚˜μ˜¨λ‹€.
λ¬Έμ œλŠ” λ‚œ strip()이 무슨 ν•¨μˆ˜μΈμ§€ λͺ¨λ₯Έλ‹€λŠ” 것..!!!! 이 기회λ₯Ό λ†“μΉ˜μ§€ μ•Šκ³  λ‚΄μΉœκΉ€μ— λ¬Έμžμ—΄ κ΄€λ ¨ λ‚΄μž₯ν•¨μˆ˜ 정리 κ°‘λ‹ˆλ‹·
πŸ‘‰πŸ» λ¬Έμžμ—΄ ν•¨μˆ˜: read(), strip(), replace()

1. read()


λ‚΄κ°€ 가진 λ¬Έμžμ—΄ 데이터λ₯Ό 라인 ꡬ뢄 없이, λͺ¨λ“  λ‚΄μš©μ„ ν•œκΊΌλ²ˆμ— μ—°κ²°ν•΄μ„œ ν‘œν˜„ν•΄μ€€λ‹€.

2. strip()


λ‚΄κ°€ ν•„μš”ν•œ 데이터가 ACGT둜 이루어진 데이터라고 κ°€μ •ν•˜κ³  이λ₯Ό μΆ”μΆœν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?
πŸ‘‰πŸ» β‚©nμ΄λΌλŠ” 엔터에 ν•΄λ‹Ήν•˜λŠ” 특수 기호λ₯Ό μ‚­μ œν•˜κ³ , 맨 μ•žμ˜ headerλ₯Ό λ‚ λ €μ£Όμ–΄μ•Ό ν•œλ‹€.

μ§€κΈˆμ²˜λŸΌ μž…λ ₯받은 λ¬Έμžμ—΄μ΄ μžˆμ„ λ•Œ, strip() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ 곡백, β‚©n 기호λ₯Ό μ‚­μ œν•œ 결과물을 확인할 수 μžˆλ‹€.

ν•˜μ§€λ§Œ strip() ν•¨μˆ˜λŠ” λ¬Έμžμ—΄ 쀑간에 μ‘΄μž¬ν•˜λŠ” 것은 μ œκ±°ν•΄μ£Όμ§€ μ•ŠλŠ”λ‹€.

μ΄λ ‡κ²Œ λ¬Έμžμ—΄ μ€‘κ°„μ˜ 것듀은 μ œκ±°λ˜μ§€ μ•Šμ€ 것을 확인할 수 μžˆλ‹€.

3. replace()

μ΄λŸ΄λ•Œ μ‚¬μš©ν•˜λŠ”κ²ƒμ΄ replace()ν•¨μˆ˜! 이름 κ·ΈλŒ€λ‘œ λŒ€μ²΄ν•œλ‹€λŠ” 뜻으둜, 첫번째 인자λ₯Ό λ‘λ²ˆμ§Έ 인자둜 λŒ€μ²΄ν•˜λŠ” 것이닀.

μ²«λ²ˆμ§Έλ‘œλŠ” header의 λ¬Έμžμ—΄μ„ κ·ΈλŒ€λ‘œ μž…λ ₯ν•˜κ³ , ""을 λ‘λ²ˆμ§Έ 인자둜 μž…λ ₯ν•΄μ„œ header --> ""둜 λŒ€μ²΄ν•˜λ„λ‘ ν•˜μ˜€λ‹€.
κ·Έ 이후에 또 replace()ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ β‚©n을 μ œκ±°ν•˜λ©΄ μ›ν•˜λŠ” 것듀을 μ°¨λ‘€λ‘œ λͺ¨λ‘ μ œκ±°ν•  수 μžˆλ‹€.

μ§€μ›Œμ§ˆ κ²ƒλ“€μ˜ μˆœμ„œλ₯Ό 잘 μƒκ°ν•΄μ„œ μ μš©ν•  것!

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

0개의 λŒ“κΈ€