Code KATA | # 2

Jiwon Jung·2020년 12월 30일
0

Code KATA

목록 보기
2/7
post-thumbnail

문제

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

problem

현재 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은 짧아졌네요 코드가 훨씬 읽기도 편하고.....
감사합니다 동규님...

What I Learnt

코딩의 TMI

아직 코드카타의 난이도가 높지 않은 이유도 있겠지만 코드 스크립트가 너무 길다고 생각이 들면 한번은 의심해 볼 필요가 바로 'TMI 인가?'인 것 같다.

결과가 좋은 코드라도 가독성이 좋고 효율성이 좋은 대체 코드가 얼마든지 존재 할수가 있기 때문이다. 물론 네비 처럼 길이 단순하다 해서 좋은 것은 아니다. 오히려 다양한 길을 이용하더라도 더 빨리 도착할수가 있고 오류가 적다면 조금더 조건을 주어 오류를 줄일수도 있겠지만 그러한 문제가 아니라면 '효율적인지? 남들이 이해하기 좋은지?' 한번은 고민해보자

profile
Venire, Videre, Vincere

0개의 댓글