◇ 문제 설명
자연수 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
'코딩테스트 > C언어' 카테고리의 다른 글
[Level1] 짝수와 홀수 답안 및 풀이 (0) | 2021.06.10 |
---|---|
[Level1] 정수 제곱근 판별 답안 및 풀이 (0) | 2021.06.10 |
[Level1] 자릿수 더하기 답안 및 풀이 (0) | 2021.06.09 |
[Level1] 약수의 합 답안 및 풀이 (0) | 2021.06.08 |
[Level1] 이상한 문자 만들기 답안 및 풀이 (0) | 2021.06.08 |
댓글