Q. 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

 

def solution(n):
    m = list(str(n))
    num = list(map(int, m))
    l = len(m)
    a = [0]*l
    for i in range(0, l):
        for j in range(0, l):
            if i != j and i + j == (l-1):
                a[i]=num[j]
                a[j]=num[i]
            elif i == j and i + j == (l-1):
                a[i] = num[i]
    return a

 

Sol)

우선 자연수 n이 13569 라 가정한다.

우리는 [9,6,5,3,1]을 결과값으로 출력해야 한다. 

n을 각 자리 수마다 쪼개서 리스트에 담았다. 그리고 리스트를 다음과 같이 표현했다.

idx 0 1 2 3 4
1 3 5 6 9

결과값을 분석해보면

1과 9가 자리를 바꿨고, 3과 6이 자리를 바꿨다. 다시 말해

n[0]과 n[4]가 자리를 바꿨고, n[1]과 n[3]이 자리를 바꿔야한다.

자리를 바꿔야하는 인덱스들의 공통점은 합이 리스트 n의 길이 (또는 자연수 n이 자릿수) - 1과 같다. 

 

def solution(n):
    m = list(str(n))   #자연수 n을 각 자리수마다 쪼개서 list에 담기(문자열로만 담김)
    num = list(map(int, m))  #m에 담긴 값을 다시 int로 바꿔 num에 담기
    l = len(m)      #리스트 m의 길이
    a = [0]*l       #조건을 비교하여 집어넣을 빈 리스트 
    for i in range(0, l):
        for j in range(0, l):
            if i != j and i + j == (l-1):   # ex) l=5일 때, i=0, j=4이면
                a[i]=num[j]					# 자리가 바뀌게끔 a에 추가 
                a[j]=num[i]
            elif i == j and i + j == (l-1):  # ex) l=5일 때, i=2, j=2이면
                a[i] = num[i]				# 자리 바꿈없이 그냥 같은 인덱스에 추가
    return a

 

 

 

제한시간은 30분이지만 거진 1시간은 걸린 것 같다. 그래도 이렇게 코드를 전시하는 이유는 너어어어무 뿌듯하기 때문이다!! 물론 효율성은 떨어지는 코드다. reversed() 함수를 사용해도 됐지만 다른 로직으로 구현하고 싶은 욕심이 들어서 효율은 우선 재끼고 결국 만들어냈다!

알고리즘 공부를 제대로 시작한지는 이틀밖에 안됐는데 스스로가 만족스러운 성과를 냈다!! 야호!

 

+ Recent posts