[Algorithm] #1. 1주차 2번

김상웅·2022년 6월 8일
0

[알고리즘]

목록 보기
2/18

📌 문제


reverse 함수에 정수인 숫자를 인자로 받습니다.

그 숫자를 뒤집어서 반환하는 프로그램을 작성해주세요.

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

다음 예시를 보면, x를 인자고 받고 return값을 반환합니다.

x: 1234
return: 4321

x: -1234
return: -4321

x: 1230
return: 321



✅ 풀이


처음 문제를 분석하면서 List의 index를 활용하여 푸는 방식으로 접근하였습니다.

하지만 Python에는 방대하고 쉬운 method가 내장되어 있습니다.

우선, 내장함수와 List의 슬라이싱을 통해 풀이한 첫번째 코드는 다음과 같습니다.

📌 첫번째 풀이

def reverse(number):

   if number > 0 :
     over_zero = str(number)[::-1]
     return int(over_zero)
   else :
     under_zero = str(-number)[::-1]
     return int(-under_zero)

여기서 list를 슬라이싱하는 부분에 대해 알아보면,

[ 시작index : n번째 값 : 간격 ]

다음과 같은 형식을 지니는데요

만약 다음과 같은 배열이 있다고 가정하고, 세가지 방법으로 슬라이싱 해보겠습니다.

list = [1, 2, 3, 4, 5]

1) list[:] >>> [1 ,2 ,3 ,4 ,5]
시작 index를 명시하지 않으면 index=0인 값부터 시작합니다.
마지막 값을 명시하지 않으면 배열의 마지막 값까지 슬라이싱을 합니다.

2) list[2:4] >>> [2, 3, 4]
index가 2인 값부터 배열의 네번째 값까지 슬라이싱을 합니다.

3) list[::-1] >>> [5, 4, 3, 2, 1]
시작index부분에 4를 기입하여 역순을 더욱 명확하게 지정할 수 있습니다.
간격이 -1인 경우 슬라이싱의 방향이 반대로 진행됩니다.
시작 index = "" >> index=0 >> 1
n번째 값 = "" >> 마지막 값 >> 4
간격 = -1 >> 시작 index부터 좌측으로, index가 0이라면 마지막 값으로 슬라이싱



📌 또 다른 풀이

def reverse(number):

  set_number = str(abs(number)) #음수일 때 - 기호를 없애고 for loop를 위해 문자열로 변환
  new_num_list = []
  reversed_list = []
	
  # 정수의 각 자리수의 수를 원소로 가지는 리스트 생성
  for n in set_number :
    new_num_list.append(n)
   
  # 리스트의 길이만큼 가장 마지막 원소부터 빼내고,
  # 새로운 리스트에 기존 리스트의 역순으로 원소 추가하기
  for i in range(len(new_num_list)) :
    reversed_list.append(new_num_list.pop())

  # 뒤집어진 새로운 원소들을 모두 합치는 과정
  # 가장 윗부분에서 문자열로 변환했기 때문에 다시 정수로 변환
  result = int("".join(reversed_list))
  
  # 인자로 받는 정수의 절댓값으로 result를 반환하기 때문에
  # 인자가 음수일 경우 처리하는 조건문
  if (number < 0 ) :
    return -result
  else:
    return result

각 자리의 수를 각 자리수(1, 10, 100, 1000 ... )로 나눈 나머지를 활용하여 숫자를 뒤집을 수도 있을 것 같습니다.

좀 더 고안해보고 코드를 추가해보겠습니다.

profile
누구나 이해할 수 있도록

0개의 댓글