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였다!
Author And Source
이 문제에 관하여(Code Kata | Day 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jacoblee19/Code-Kata-Day-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)