Code Kata | Day 2

> 문제

reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.

x: 숫자

return: 뒤집어진 숫자를 반환!

예들 들어,

x: 1234
return: 4321

x: 1234
return: 4321

x: -1234
return: -4321

x: -1234
return: -4321

x: 1230
return: 321

내 답안

def reverse(number):
  if number == 0:
    return 0  
  new_number = str(number)
  new_number = new_number[::-1]

  if "-" in new_number:
    new_number = new_number.replace("-", "")
    new_number = int(new_number)
    new_number = new_number - new_number * 2
    new_number = str(new_number)

  if "0" in new_number:
    new_number = new_number.replace("0", "")

  return int(new_number)

정말 길고 지저분해 보일 수 는 있지만 승연님과 정말 열심히 푼 문제이다🥲

처음 생각을 했던 로직은

  • 정수형이니 리스트로 변환 해준다.
  • 리스트에서 reverse 기능을 사용해서 거꾸로 만들어 주고,
  • 리스트를 다시 int로 바꿔줌.

하지만 생각해보니 정수로 받기 때문에 -1이 될 수도 있고 0이 될 수도 있다는 것이였다.
또, 막상 reverse를 사용해 해보려고 하니 잘 먹히지가 않았다.

결국 고민하다가 주변에 물어보니 슬라이싱을 사용해볼 수도있다고 귀띔을 해주었다.
문자열도 슬라이싱을 하고 인덱스가 있는지 부끄럽지만 이 번에 처음 알았다.

그래서 우선 증가폭을 -1로 설정해주면 거꾸로 만드는 것은 어렵지 않기 때문에 거꾸로 만들어 주었고,
인덱스를 삭제하려고 del이나 pop을 사용해보니 두 개는 문자열에 사용이 안 된다는 구글링 답변을 얻었다.
그래서 replace란 함수를 찾고 0이나 -를 찾아 삭제해주었다.

그리고 마지막에 -가 다시 와줘야 하기 때문에... 고민하다가
갑자기 승연님이 수학적인 머리를 발동해서 new_number-(new_number * 2)를 해주자! 해서 -가 앞에 오게 해주었다.

결국 한 시간 꾹꾹 채워 문제 해결을 해서 뿌듯했지만 다른 동료들의 답을보니 그저 곱하기 -1............
하하하하하하하하하하하하 😭. 정말 쉬운 방법이 있었는데 우리는 왜 이리 돌아왔나 싶나.
그래도 풀어서 뿌듯하고 다음엔 이렇게 해야지라는 takeaways가 있어서 뜻 깊은 코드 카타 시간이였다.

모범 답안

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)

모범 답안을 보니 너무 간단하고 가독성이 좋다.

우선 정수를 스트링으로 만들어 준다라는 로직은 같고,
문자열 안에 -가 있을 때 우선 문자열을 거꾸로 만들어주고, 문자열 인덱스 -1- 부호가 있는 곳이기 때문에 -1을 처음에 더해줘 문자열 앞에 -가 붙게해주고 -1까지의 인덱스만 더해줌으로 적절한 숫자를 리턴해주는 로직인 것 같다.

슬라이싱을 -1까지 해놓았기 때문에 실제로 출력되는 숫자는 인덱스 -2까지이다.
그러기에 거꾸로한 숫자는 출력되면서 앞에 - 부호가 붙게 된 것이다.

간단하면서도 슬라이싱으로 이렇게 구현할 수 있구나가 신기한 문제였다.
배우는 점도 많고 노력도 많이한 코드 카타 데이 2였다!

좋은 웹페이지 즐겨찾기