[๐Ÿค”Code Kata] 2week-1

์—ฌ์ฃผ๋งยท2020๋…„ 12์›” 13์ผ
0

CodeKata

๋ชฉ๋ก ๋ณด๊ธฐ
3/7
post-thumbnail

๋‹จ ํ•œ๋ฌธ์ œ๋„ ์‰ฝ์ง€ ์•Š์•˜๋‹ค๊ณ  ํ•œ๋‹ค.....๐Ÿ˜จ
๊ทธ๋ฆฌ๊ณ  ์™œ ๋ฌธ์ œ๋ฅผ ์ดํ•ด๋ฅผ ์ž˜ ๋ชปํ•˜๋Š”๊ฑธ๊นŒ? ์ข€๋” ๋ฌธ์ œ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ๋ด์•ผํ• ๋“ฏ

-DAY1-

<๋ฌธ์ œ>
๋กœ๋งˆ์ž์—์„œ ์ˆซ์ž๋กœ ๋ฐ”๊พธ๊ธฐ 1~3999 ์‚ฌ์ด์˜ ๋กœ๋งˆ์ž s๋ฅผ ์ธ์ž๋กœ ์ฃผ๋ฉด ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ์„ธ์š”.

๋กœ๋งˆ ์ˆซ์ž๋ฅผ ์ˆซ์ž๋กœ ํ‘œ๊ธฐํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

SymbolValue
I1
V5
X10
L50
C100
D500
M1000

๋กœ๋งˆ์ž๋ฅผ ์ˆซ์ž๋กœ ์ฝ๋Š” ๋ฐฉ๋ฒ•์€ ๋กœ๋งˆ์ž๋ฅผ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋”ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
III = 3
XII = 12
XXVII = 27์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ 4๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ๋Š” IIII๊ฐ€ ์•„๋‹ˆ๋ผ IV ์ž…๋‹ˆ๋‹ค.
๋’ค์˜ ์ˆซ์ž์—์„œ ์•ž์˜ ์ˆซ์ž๋ฅผ ๋นผ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
9๋Š” IX์ž…๋‹ˆ๋‹ค.
I๋Š” V์™€ X์•ž์— ์™€์„œ 4, 9
X๋Š” L, C์•ž์— ์™€์„œ 40, 90
C๋Š” D, M์•ž์— ์™€์„œ 400, 900

์ ‘๊ทผ๋ฐฉ๋ฒ•

๋‚˜๋Š” ์ฒ˜์Œ์— ์‹œ์ž‘ํ• ๋•Œ ๊ฐ ์ˆซ์ž,๋กœ๋งˆ์ž๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ์— ๋„ฃ์ž๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ ์•ˆ๋ฐ 4,9,40,90,400,900์˜ ๊ฒฝ์šฐ๋„ ๋„ฃ์€๋’ค ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜ฌ ๋กœ๋งˆ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•ด์ฃผ์ž๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์ดํ›„ ์–ด๋–ป๊ฒŒ ์ ‘๊ทผ์„ ํ•ด์•ผํ• ์ง€๊ฐ€ ๋„ˆ๋ฌด ๋ง‰๋ง‰ํ•ด์„œ ๊ฒฐ๊ตญ ๊ฐ™์ด ํ•˜๋Š” ๋ฏผ์ฒ ๋‹˜์„ ์˜์ง€ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ ..
๋ฏผ์ฒ ๋‹˜์˜ ํ•˜๋“œ์บ๋ฆฌ๋ฅผ ํ•ด์ฃผ์…จ๋‹ค...ใ…œ

def roman_to_num(string):
 # ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
  a=[โ€˜4โ€™,โ€˜9โ€™,โ€˜40โ€™,โ€˜90โ€™,โ€˜400โ€™,โ€˜900โ€™]
  r=[โ€˜IVโ€™,โ€˜IXโ€™,โ€˜XLโ€™,โ€˜XCโ€™,โ€˜CDโ€™,โ€˜CMโ€™]
  b = [โ€˜1โ€™,โ€˜5โ€™,โ€˜10โ€™,โ€˜50โ€™,โ€˜100โ€™,โ€˜500โ€™,โ€˜1000โ€™]
  o = [โ€˜Iโ€™,โ€˜Vโ€™,โ€˜Xโ€™,โ€˜Lโ€™,โ€˜Cโ€™,โ€˜Dโ€™,โ€˜Mโ€™]
  new=[]
  for i in range(len(a)):
    if r[i] in string:
        string=string.replace(r[i],a[i])
        new.append(a[i])
  for i in range(len(string)):
    if s[i] in o:
        index=o.index(string[i])
        new.append(b[index])
  answer = 0
  
  for i in new:
    answer += int(i)
  return answer

๋จผ์ € 4,9์˜ ์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ›„ ์ด๋ฅผ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋‚˜๋จธ์ง€ ๊ฒฝ์šฐ์— ๋งž์ถฐ for ๋ฌธ์„ ํ†ตํ•ด ์ ์šฉํ•ด์ฃผ์—ˆ๋‹ค.

Solution

def roman_to_num(s):
         """
         :type s: str
         :rtype: int
         """
         L = []
         sum = 0
         d = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
         for i in s[::-1]:
             if L:
                 if i=='I' and L[-1] in ['V','X']:
                     sum -= 1
                     L.pop()
                 elif i=='X' and L[-1] in ['L','C']:
                     sum -= 10
                     L.pop()
                 elif i=='C' and L[-1] in ['D','M']:
                     sum -= 100
                     L.pop()
                 else:
                     sum += d[i]
                     L.append(i)
             else:
                 sum +=d[i]
                 L.append(i)
         return sum

๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋จผ์ € ์ˆ˜๋“ค์„ ๋„ฃ์–ด์ฃผ๊ณ  4,9๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ „๋ถ€๋‹ค ํ•ด์ฃผ๋Š” ์†”๋ฃจ์…˜์ด์˜€๋‹ค.
ํ .. ์ด์ชฝ์ด ์ข€๋” ๋นจ๋ฆฌ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ• ๊ฑฐ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค๊ธด ๋“ ๋‹ค..
(๋ฌผ๋ก  ์‹์ด ๊ธธ์–ด์กŒ์ง€๋งŒ?)

-DAY2-

<๋ฌธ์ œ>
์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ธ nums๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
์ˆซ์ž์ค‘์—์„œ ๊ณผ๋ฐ˜์ˆ˜(majority, more than a half)๊ฐ€ ๋„˜์€ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ์„ธ์š”.
(๊ฐ€์ • : nums ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” ๋ฌด์กฐ๊ฑด 2๊ฐœ ์ด์ƒ)

์˜ˆ๋ฅผ ๋“ค์–ด,
nums = [3,2,3] -> return 3
nums = [2,2,1,1,1,2,2] -> return 2

์ ‘๊ทผ๋ฐฉ๋ฒ•

์˜ค๋Š˜์˜ ์ฝ”๋“œ์นดํƒ€๋Š” ์ฃผํ˜•๋‹˜! ๋ญ”๊ฐ€ ๋‚ด๊ฐ€ ๊ฐ™์ด ํ•˜๋Š”๋ถ„๋“ค์ด ์ญ‰ ์ž˜ํ•˜์‹œ๋Š” ๋ถ„๋“ค์ด๋ผ์„œ ๋ญ”๊ฐ€ ์‰ฝ๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ’€์ˆ˜ ์žˆ์—ˆ๋‹ค.
(๋ฌผ๋ก  ๋‚˜๋„!! ์ƒ๊ฐ์„ ํ•˜์ง€๋งŒ ๋ญ”๊ฐ€ ๋‹จ๊ธฐ๊ฐ„์— ํ’€์–ด๋‚ด๋Š”๊ฒŒ ์•„์ง ๋ฏธ์ˆ™ํ•œ๊ฑฐ๊ฐ™๋‹ค ใ…œใ…œ)
๊ณผ๋ฐ˜์ˆ˜๋ผ๊ณ  ํ–ˆ์œผ๋‹ˆ ๋จผ์ € ๊ณผ๋ฐ˜์ˆ˜๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€๋ฅผ //๋ฅผ ํ†ตํ•ด ์•Œ์•„๋‚ธ๋’ค
countํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๊ณผ๋ฐ˜์ˆ˜๊ฐ€ ๋„˜๋Š” ์ˆซ์ž๋ฅผ ๋ฝ‘์•„๋‚ด์ž๋Š” ์ƒ๊ฐ์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค.

def more_than_half(nums):
  half_nums = len(nums) // 2
  set_list = set(nums)
  
  for i in set_list:
    if nums.count(i) >= half_nums:
      return i

Solution

def more_than_half(nums):
	majority_count = len(nums)//2
	for num in nums:
		count = sum(1 for elem in nums if elem == num)
		if count > majority_count:
			return num

์˜ค์˜ค ์ ‘๊ทผ๋ฒ•์ด ๋น„์Šทํ–ˆ๋‹ค!
์ด๋ฒˆ์—๋Š” ์†”๋ฃจ์…˜๋ณด๋‹ค ์šฐ๋ฆฌ๊ฐ€ ํ•œ๊ฒŒ ์‹œ๊ฐ„์ด ๋œ๋“œ๋Š”๊ฑฐ ๊ฐ™์€๋ฐ.. ๊ธฐ๋ถ„ํƒ“์ธ๊ฐ€๐Ÿค”

profile
๐ŸŒฑBackend Developer๐Ÿ‘ฉโ€๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด