TIL26 | CodeKata 배열 요소 조합해서 특정 수 만들기, 숫자 뒤집기

2021. 10. 19. 22:00언어/Python

반응형

CodeKata Week 1

코드카타 첫 주가 시작됐다.

렛츠고고

 

문제 1

two_sum 함수에 숫자 리스트와 '특정 수'를 인자로 넘기면, 더해서 '특정 수'가 나오는 index를 배열에 담아 return해 주세요.

def two_sum(nums, target):
  # 구현

input

nums = [4, 9, 11, 14]
target = 13

output

[0, 1]

 

나의 풀이

1) 2중 for문

def two_sum(nums, target):
  for i in range(len(nums)-1):
    for j in range(i+1,len(nums):
      if nums[i] + nums[j] == target:
        return [i , j]
  • 가장 쉽게 구현할 수 있는 방법이다.

  • 시간 복잡도 O(N²) 이기 때문에 nums의 데이터가 많은 경우 시간 내에 풀기 힘들 수도 있다.

2) itertools 표준 라이브러리 사용

from itertools import combinations
def two_sum(nums, target):
  combinated = list(combinations(nums, 2))
  for i in combinated:
    if i[0] + i[1] == target:
      return [nums.index(i[0]), nums.index(i[1])]
  • itertools 표준 라이브러리의 combinations 사용해서 푸는 방법
  • combinations() 이 조합의 경우를 반환하기 때문에 조합된 경우만큼 for문 내에서 조건을 확인하면 된다.

 

문제 2

reverse 함수에 정수인 숫자를 인자로 받습니다.

그 숫자를 뒤집어서 return해주세요.

def reverse(number):
  # 구현

input & output

x: 1234
return: 4321

x: -1234
return: -4321

x: 1230
return: 321

 

나의 풀이

1) replace() 사용

def reverse(number):
  if number == 0 : return 0

  flag = '-' if number < 0 else '' 
  nums = list(str(number).replace('-', '').replace('0', '')[::-1])
  nums.insert(0, flag)

  return int(''.join(nums))
  • 음수 - 판별을 위한 flag 변수 생성
  • 음수 -0 의 값을 replace() 를 사용해서 빈값으로 만들어 준 뒤에 reverse를 사용
  • string 배열을 join으로 합쳐서 리턴

2) 조건문으로 str배열값 확인 (재원님 풀이! )

def reverse(number):
  res = str(number)[::-1]
  if res[0] == 0:
    res = res[1:]
  if res[-1] == '-':
    res = int(res[0:len(res)-1]) * -1
  return int(res)

x = -1230  
print(reverse(x))
  • str 배열 인덱스를 사용해서 -, 0 값을 확인

재원님의 풀이를 보고 굳이 내장함수인 replace(), join() 등을 사용하지 않아도 list index로 깔끔하게 처리할 수 있다는 것을 배웠다 !

반응형