본문 바로가기
코딩테스트/C언어

[Level1] 자연수 뒤집어 배열로 만들기 답안 및 풀이

by SRin23 2021. 6. 9.

◇ 문제 설명

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

 

◇ 제한 조건

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

 

◇ 입출력 예시

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

 

◇ 초기 내용

※ [출처] 프로그래머스-코딩테스트 연습-문제명

※ 초기 내용을 참고하여 문제에 맞는 코드를 작성하세요.

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

int* solution(long long n) {
    // 리턴할 값은 메모리를 동적 할당해주세요.
    int* answer = (int*)malloc(...);
    return answer;
}

 


◇ 답안

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

int* solution(long long n) {
    // 리턴할 값은 메모리를 동적 할당해주세요.
    long long cpn = n;
    int cnt = 0;
    while(cpn!=0){
        cpn/=10;
        cnt++;
    }
    int* answer = (int*)malloc(sizeof(int) * cnt);
    int i = 0;
    
    while(n!=0){
        answer[i] = n%10;
        n /= 10;
        i++;
    }
    
    return answer;
}

 

◇ 답안 풀이

(※ 실행 흐름 순으로 해석됩니다.)

int* solution(long long n) {

    //n의 copy본 cpn
    long long cpn = n;

    //n의 자릿수를 셀 cnt변수 선언 
    int cnt = 0;

 

    //n의 자릿수의 개수 세기
    while(cpn!=0){
        cpn/=10;
        cnt++;
    }

 

    //위에서 센 자릿수의 개수 * int형의 메모리값만큼 메모리 동적 할당

    //그냥 cnt를 계산하지 않고, 큰 값으로 메모리를 할당해도되지만, 그러면 메모리의 낭비가 심함
    int* answer = (int*)malloc(sizeof(int) * cnt);
    

    //answer의 인덱스변수 i

    int i = 0;
    

    //n%10을 하여 뒷자리(1의자리)부터 가장 큰 자릿수까지 순서대로 값을 떼어냄

    //떼어낸 값을 answer 배열에 저장
    while(n!=0){
        answer[i] = n%10;
        n /= 10;
        i++;
    }
    
    return answer;
}

 

 

◇ 실행결과

자연수 뒤집어 배열로 만들기 실행결과

 

◇ 출처

https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

댓글