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

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

CodeKata

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

-DAY1-

<๋ฌธ์ œ>
twoSumํ•จ์ˆ˜์— ์ˆซ์ž ๋ฆฌ์ŠคํŠธ์™€ 'ํŠน์ • ์ˆ˜'๋ฅผ ์ธ์ž๋กœ ๋„˜๊ธฐ๋ฉด,๋”ํ•ด์„œ 'ํŠน์ • ์ˆ˜'๊ฐ€ ๋‚˜์˜ค๋Š” index๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„ returnํ•ด ์ฃผ์„ธ์š”.

nums: ์ˆซ์ž ๋ฐฐ์—ด
target: ๋‘ ์ˆ˜๋ฅผ ๋”ํ•ด์„œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ํ•ฉ๊ณ„
return: ๋‘ ์ˆ˜์˜ index๋ฅผ ๊ฐ€์ง„ ์ˆซ์ž ๋ฐฐ์—ด
์˜ˆ๋ฅผ ๋“ค์–ด,
nums์€ [4, 9, 11, 14]
target์€ 13
nums[0] + nums[1] = 4 + 9 = 13 ์ด์ฃ ?
๊ทธ๋Ÿฌ๋ฉด [0, 1]์ด return ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
(target์œผ๋กœ ๋ณด๋‚ด๋Š” ํ•ฉ๊ณ„์˜ ์กฐํ•ฉ์€ ๋ฐฐ์—ด ์ „์ฒด ์ค‘์— 2๊ฐœ ๋ฐ–์— ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.)

์ ‘๊ทผ๋ฐฉ๋ฒ•

์ฒ˜์Œ์— ๋ฐ”๋กœ
๊ฐ ์ธ์ž๋ฅผ ์„œ๋กœ ๋น„๊ตํ• ์ˆ˜ ์žˆ๊ฒŒ for loop๋ฅผ ์“ฐ๊ณ  ๊ทธ ์•ˆ์— ๋‹ค์‹œ for loop๋ฅผ ๋„ฃ์ž๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

def two_sum(nums, target):
  for i in nums:
    for j in nums:
      if i + j == target and i != j:
          print(nums.index(i),nums.index(j))

์ฒ˜์Œ์— ๋งŒ๋“  ์‹์ธ๋ฐ ์ดํ›„ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฐ๊ณผ๋Š”
tow_sum([4,9,11,14],18)์˜ ๊ฒฝ์šฐ

0,3
3,0

์œผ๋กœ ์ •๋ง ๋ง๊ทธ๋Œ€๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋Œ€์ž…ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€๋ฒ„๋ ธ๋‹ค ใ… ใ… 
์‹ฌ์ง€์–ด ๋ฆฌ์ŠคํŠธํ˜•ํƒœ๋„ ์•„๋‹ˆ๋‹ค...ใ… ใ… 

๋‹ค๋ฅธ๋ถ„๋“ค์˜ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•

def two_sum(nums, target):
  index = 0
  for n in range(index,len(nums)):
    for i in range(index+1,len(nums)):
      if nums[n] + nums[i] == target:
        return [n,i]

์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด, range๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค.
index์™€ range๊ทธ๋ฆฌ๊ณ  ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฒ•์ด ์•„์ง ์ต์ˆ™์น˜ ์•Š์€๋ฐ, ์ •๋ง์ •๋ง ๋งŽ์ด ์“ฐ์ด๋Š”๊ฑฐ ๊ฐ™์•„ ๊ผญ ์ต์ˆ™ํ•ด์กŒ์œผ๋ฉด ํ•œ๋‹ค...

(๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฒˆํ˜ธ๋ฅผ ์ฐพ๋Š”๊ฒƒ๋ณด๋‹ค, ์ธ๋ฑ์Šค๋ฒˆํ˜ธ๋ฅผ ์ด์šฉํ•ด ๊ฐ’์„ ๋ถˆ๋Ÿฌ๋‚ด๋Š”๊ฒŒ ๋” ํŽธํ•œ๊ฑธ ์žŠ์ง€ ๋ง์ž!! ๋งจ๋‚ ๋ฐ˜๋Œ€๋กœํ•˜๋Š”์ค‘)

solution

def two_sum(nums, target):
    index_map = {}
    for i in range(len(nums)):
        num = nums[i]
        pair = target - num
        if pair in index_map:
            return [index_map[pair], i]
	index_map[num] = i
	return None

๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์ด์˜€๋‹ค..
์ผ๋‹จ for loops์˜ ์‹œ์ž‘์€ ์—ญ์‹œ range๋กœ ์•ˆ์— pair๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ์‹ ๋ฐ•ํ•œ(?)๋ฐฉ๋ฒ•์ด๋‹ค...
์ฒ˜์Œ์—๋Š” ๋ญ ์ด๋ ‡๊ฒŒ ์–ด๋ ค์›Œ? ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ํ•œ๋ฒˆ ๋ณด๋‹ˆ ๋„ˆ๋ฌด๋‚˜ ์™„๋ฒฝ...๐Ÿ˜ž
๋ญ์•ผ๋ฌด์„œ์›Œ, ๊ทผ๋ฐ ๋‚˜๋„ ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•ด๋ณด๊ณ  ์‹ถ๋‹ค...

-DAY2-

<๋ฌธ์ œ>
reverse ํ•จ์ˆ˜์— ์ •์ˆ˜์ธ ์ˆซ์ž๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.๊ทธ ์ˆซ์ž๋ฅผ ๋’ค์ง‘์–ด์„œ returnํ•ด์ฃผ์„ธ์š”.
x: ์ˆซ์ž
return: ๋’ค์ง‘์–ด์ง„ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜!

์˜ˆ๋ฅผ ๋“ค์–ด,

  • x: 1234 -> return: 4321
  • x: -1234 ->return: -4321
  • x: 1230 ->return: 321

์ ‘๊ทผ๋ฐฉ๋ฒ•

์–‘์ˆ˜์˜ ๊ฒฝ์šฐ ๊ทธ๋ƒฅ reverseํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ, ์Œ์ˆ˜์˜ ๊ฒฝ์šฐ์—๋Š” -๋ฅผ๋—€ ์ ˆ๋Œ€๊ฐ’์„ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
๊ทธ ํ›„ ์–‘์ˆ˜๋ฅผ ์Œ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ฐพ์•„๋ณด์ž!๋กœ ์ ‘๊ทผํ•ด๋ณด์•˜๋‹ค

def reverse(number):
  if number == 0:
    return 0
  else:
    if number < 0:
      a =int(str(abs(number))[::-1])
      return -a
    else:
      a =int(str(abs(number))[::-1])
      return a

1.์Œ์ˆ˜๋„ ์–‘์ˆ˜๋„์•„๋‹Œ 0์€ ๊ฑฐ๊พธ๋กœํ•ด๋„ 0์ด๋ฏ€๋กœ ๋จผ์ € ์ž‘์„ฑ์„ ํ•ด์ฃผ์—ˆ๋‹ค.
2.์Œ์ˆ˜์˜ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ •ํ•ด์ฃผ์—ˆ๋‹ค. ์ˆซ์ž๋ฅผ ์ ˆ๋Œ€๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค€๋’ค ์ด๊ฑธ ๋ณ€๊ฒฝํ• ์ˆ˜ ์žˆ์„๊นŒ? ํ•˜๊ณ  ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ [::-1]๋ผ๋Š” ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์–ด์ฃผ๋Š” ๋งค์„œ๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜์—ฌ ์ด๊ฑธ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
return๊ฐ’์€ ์›๋ž˜๋Œ€๋กœ ์Œ์ˆ˜๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ -๋ฅผ ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค.
3.์–‘์ˆ˜๋Š” ๋ฐ”๋กœ ๋’ค์ง‘์€๋’ค ๋ฐ”๋กœ returnํ•ด์ฃผ์—ˆ๋‹ค.

solution

def reverse(number):
	string = str(number)
	if string[0] == '-':
		string = string[::-1]
		new_string = string[-1]+string[:-1]
		return int(new_string)
	string = string[::-1]
	return int(string)

์ข€๋” ๊ฒ€์ƒ‰ํ•ด๋ณด์•˜๋‹ค

์™œ๋ƒ? ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ์ˆซ์ž, ๊ทธ๋ƒฅ reverseํ•˜๋ฉด ๋ ๊ฑฐ๊ฐ™์•˜๋Š”๋ฐ, ์—†๋”๋ผ๊ณ ..? ๋ฌธ์ž์—ด๋กœ๋ณ€๊ฒฝ->๋’ค์ง‘๊ณ ->๋‹ค์‹œ ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€๊ฒฝ..

์ˆซ์ž์ธ ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ? ํ•˜๋Š” ๋งˆ์Œ์— ์ข€๋” ๊ตฌ๊ธ€๋ง ํ•ด๋ณด์•˜๋‹ค.(์ด๋ ‡๊ฒŒ ์–ด๋ ต๋‹ค๋‹ˆ...?)

Algorithm
Input Integer: number

  • Initialize variable revs_number = 0
  • Loop while number > 0
    • Multiply revs_number by 10 and add remainder of number
      divide by 10 to revs_number
      revs_number = revs_number*10 + number%10;
    • Divide num by 10
  • Return revs_number

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

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

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