[Code Kata] 2. Reverse

그냥·2022년 6월 9일
0

CodeKata

목록 보기
1/18

문제

def reverse에 정수인 숫자를 인자로 받습니다. 그 숫자를 뒤집어서 return

x: 숫자

return: 뒤집어진 정수형 숫자를 반환

예들 들어,

x: 1234
return: 4321

x: -1234
return: -4321

x: 1230
return: 321


풀이

1. 문제의 조건 정리

1) 정수인 숫자를 인자로 받는다.
2) 정수는 -가 붙은 음수가 있다.
3) 1230처럼 맨 뒤에 0으로 된 숫자의 경우 321로 반환되어야 한다.

2. 조건에 대한 코드 구현 방법 생각

1) 리스트 요소를 거꾸로 해서 반환하는 reversed()가 있다.
2) 그런데 인자로 정수형이 들어온다.
3) 또한 - 가 있는 경우는 list 변경 시 요소의 type이 통일되지 않아 list 변경이 불가능 하다.
4) 그럼 인자를 list로 변경시킬 때 abs()로 인자를 받아 -를 없애자 
5) 인자값을 list로 만든 후 for i in reversed(list)를 통해서 list를 거꾸로 만들자.
6) 1의 자리에 0이 들어오는 경우는 if문을 사용하여 인덱스 1 이후의 값만 받자.
7) 인자를 받을 때 절대값 처리를 했으므로 음수일 경우 -를 붙여 return 해준다.

3. 구현 코드

def reverse(number):
  
    number_list = list(map(str, str(abs(number))))
    reverse_list = []
    

    for i in reversed(number_list):
        reverse_list.append(i)

    a = int(''.join(reverse_list))
      
    if reverse_list[0] == '0' and number != 0:
      a = int(''.join(reverse_list[1:]))
     
    if number < 0:
      a=-a
           
    return a

4. 코드 리뷰

1) number_list.reverse()만 해도 되는데 빈 list를 선언하고 for 문을 돌리고 append하여 거꾸로 만듦...
2) int() 메소드를 사용하면 0321 같은 값들은 0이 그냥 사라진다. 그럼에도 불구하고 불필요한 if문을 사용하여 0이 앞에 있는 경우를 생성



5. 최고의 코드

def reverse(number):
  # 여기에 코드를 작성해주세요.
  if number < 0:
    return -int(str(abs(number))[::-1])
  else:
    return int(str(number)[::-1])

위에서 짚은 문제를 명쾌하게 해결한 코드이다.

1) if number < 0 을 통해서 음수인 경우 abs()를 사용
2) str()를 통해서 string형으로 변환. str은 인덱싱과 슬라이싱이 가능
3) [::-1]을 사용하여 str 요소들의 순서를 거꾸로 바꿈
4) str값을 int()를 통해서 정수형으로 변환 후, -를 붙여 음수 값으로 변환 및 반환
5) 음수가 아닌 경우 abs()와 -를 붙이지 않고 변환

0개의 댓글