[연습문제] 자연수 뒤집어 배열로 만들기

2024. 11. 14. 18:00입문문제

https://school.programmers.co.kr/learn/courses/30/lessons/12932

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.

예를 들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.


제한 조건

  • n은 10,000,000,000이하인 자연수입니다.

입출력 예

n return
12345 [5,4,3,2,1]

주어진 자연수의 각 자릿수를 뒤집어서 배열로 저장하는 문제입니다.

 

C언어에서 이 문제를 푸는 방법은 이전의 자릿수 더하기 문제와 동일한 방법을 사용하면 될 것 같습니다.

12345를 10으로 나누어 나머지 5를 저장하고, 1234는 다시 반복문으로 들어가 하나씩 추출하는 거죠.

 

파이썬에서도 마찬가지로 문자열로 변환한 뒤, 정수형으로 저장하면 될 것 같습니다.

다만 리스트는 reverse 함수를 사용해 뒤집는 것이 가능하니, 이 부분은 편하게 구현할 수 있습니다.

 

정답 코드를 작성해보겠습니다.

 

1. C

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int* solution(long long n) {
    // n을 저장할 변수 long long sN
    long long sN = n;
    // 자릿수를 구할 size
    int size = 0;
    // sN이 몇 자리인지 구합니다.
    while (sN > 0) {
        size++;
        sN /= 10;
    }
    // 자릿수에 맞게 answer을 선언합니다.
    int* answer = (int*)malloc(sizeof(int) * size);
    // sN을 다시 n으로 초기화합니다.
    sN = n;
    // 자릿수까지 answer에 반복해서 추가해줍니다.
    for (int i=0; i<size; i++) {
        answer[i] = sN % 10;
        sN /= 10;
    }
    // answer을 반환합니다.
    return answer;
}

 

2. 파이썬

def solution(n):
    # n을 문자열로 변환한 뒤, 리스트에 정수형으로 저장합니다.
    answer = [int(i) for i in str(n)]
    # answer 리스트를 뒤집습니다.
    answer.reverse()
    # answer을 반환합니다.
    return answer

 

10으로 나눈 나머지를 배열에 바로 삽입하면 된다는 걸 알면 편하게 풀 수 있습니다.