reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.
x: 숫자
return: 뒤집어진 숫자를 반환!
예들 들어,
x: 1234
return: 4321
x: 1234
return: 4321
x: -1234
return: -4321
x: -1234
return: -4321
x: 1230
return: 321
문제의 중점 파악
- 숫자의 역순을 구하기 위해서는 integer를 string이나 list형식으로 변환
- string에서는 음수를 인식 못하기 때문에 음수를 적용 시킬 방법
- 마지막 수가 0 일 경우 앞자리로 변환시 생략 시키는 방법
이 세가지에 대한 해결 방식으로
- int를 str로 변환 시킨후 역순으로 추출하여 str type으로 기록
-이후 int로 type 변환후 반환- 음수일 경우 -1로 양수 일 경우 1로 하여 x변수에 상ㅌ채를 저장 후 최종 결과 값에 다시 적용시킨다
- 마지막 자리가 0일 경우 continue 시키기
def reverse(number):
#양수or음수 상태 저장
x=1
if number<0:
number=number*-1
x=-1
#문자열로 값을 전환 후 리스트 형식으로 변환
number=str(number)
lst=[]
for i in number:
lst.append(i)
#list의 길이(총 역순으로 추출해야하는 index를 위해)
a = len(lst)-1
#역순 추출
string=''
for k in range(a,-1,-1):
if k==a and lst[k]==0:
continue
else:
m=lst[k]
string=string+m
#다시 정수형으로 변환후 양수,음수 상태 재적용
string=int(string)
string=string*x
return string
현재 text에 제시 된 인수를 실행하기 위해서는 문제가 없으나 만약 2600과 같이 뒷자리 숫자에 00이 여러 자릿 수까지 포함된 숫자에 대한 처리가 부실하다.
하..... 정수형으로 마지막에 변환시키면 앞 떠다니는 0들이 생략이 자동으로 된다는 것을 왜 까먹고 있었을까.....
number=2600000
x=1
if number<0:
number=number*-1
x=-1
#문자열로 값을 전환 후 리스트 형식으로 변환
number=str(number)
lst=[]
for i in number:
lst.append(i)
#list의 길이(총 역순으로 추출해야하는 index를 위해)
a = len(lst)-1
#역순 추출
string=''
for k in range(a,-1,-1):
m=lst[k]
string=string+m
#다시 정수형으로 변환후 양수,음수 상태 재적용
string=int(string)
string=string*x
print(string)
오히려 코딩을 삭제를 시켜서 더웃 확실한 로직이 나왔다... 이게 바로 프로그래밍 세계의 TMI인가...
하지만 여기서 나의 코딩 파트너가 더욱 짧고 획기적인 코딩을 제시하였다.
def reverse(number):
x = 1
if number<0:
number=number*-1
x = -1
num1 = str(number)
num2 = (num1[::-1])
num3 = (int(num2))
num4 = num3*x
return num4
'문자열'[::-1] 이 명령어가 자동으로 문자열을 역순으로 바꾸워준다는 함수...
🤦🏻
한 3분의 1은 짧아졌네요 코드가 훨씬 읽기도 편하고.....
감사합니다 동규님...
아직 코드카타의 난이도가 높지 않은 이유도 있겠지만 코드 스크립트가 너무 길다고 생각이 들면 한번은 의심해 볼 필요가 바로 'TMI 인가?'인 것 같다.
결과가 좋은 코드라도 가독성이 좋고 효율성이 좋은 대체 코드가 얼마든지 존재 할수가 있기 때문이다. 물론 네비 처럼 길이 단순하다 해서 좋은 것은 아니다. 오히려 다양한 길을 이용하더라도 더 빨리 도착할수가 있고 오류가 적다면 조금더 조건을 주어 오류를 줄일수도 있겠지만 그러한 문제가 아니라면 '효율적인지? 남들이 이해하기 좋은지?' 한번은 고민해보자