티스토리 뷰

 

문제 설명

주어진 수와 주어진 수를 뒤집은 수와의 차를 계산하려고 합니다.

예를 들어, 주어진 수가 120인 경우 이를 뒤집으면 021입니다. 십진수에서 앞의 0은 제거해야하므로 120을 뒤집은 수는 21입니다. 따라서 120과 21의 차는 99입니다.

이를 계산하기 위해서 다음과 같이 프로그램 구조를 작성했습니다.

 

  1. 주어진 수의 자릿수를 구합니다.
  2. 구한 자릿수를 이용하여 주어진 수를 거꾸로 뒤집습니다.
  3. 주어진 수와 뒤집은 수의 차이를 구합니다.

수 number가 주어질 때, 주어진 수와 주어진 수를 뒤집은 수와의 차를 return하도록 solution함수를 작성하려 합니다.

위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.

 


매개변수 설명

수 number가 solution함수의 매개변수로 주어집니다. 

  • 수 number는 1 이상 10,000 이하인 정수입니다.

예시

  number return
예제 #1 120 99
예제 #2 23 9

 

 

 

 

 


 

 

 

 

주어진 코드

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

int func_a(int number1, int number2) {
	int ret = 0;

	if(number1 > number2)
		ret = number1 - number2;
	else
		ret = number2 - number1;

	return ret;
}

int func_b(int number) {
	int ret = 0;

	while(number != 0) {
		number = number / 10;
		ret++;
	}

	return ret;
}

int func_c(int number, int digit) {
	int ret = 0;

	for(int i = 0; i < digit; i++) {
		int temp = number % 10;
		number = number / 10;
		ret = ret * 10 + temp;
	}

	return ret;
}
int solution(int number) {
    int answer = 0;
    int digit = 		;		//빈칸
    int convert_number = 		;	//빈칸
    answer = 		;			//빈칸
    return answer;
}
int main() {
	int number1 = 120;
	int ret1 = solution(number1);

	printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);

	int number2 = 23;
	int ret2 = solution(number2);

	printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}

 

 

 

 

 

 

 

 

완성 코드

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

int func_a(int number1, int number2) {
	int ret = 0;

	if(number1 > number2)
		ret = number1 - number2;
	else
		ret = number2 - number1;

	return ret;
}

int func_b(int number) {
	int ret = 0;

	while(number != 0) {
		number = number / 10;
		ret++;
	}

	return ret;
}

int func_c(int number, int digit) {
	int ret = 0;

	for(int i = 0; i < digit; i++) {
		int temp = number % 10;
		number = number / 10;
		ret = ret * 10 + temp;
	}

	return ret;
}
int solution(int number) {
    int answer = 0;
    int digit = func_b(number);
    int convert_number = func_c(number,digit);
    answer = func_a(number,convert_number);
    return answer;
}
int main() {
	int number1 = 120;
	int ret1 = solution(number1);

	printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);

	int number2 = 23;
	int ret2 = solution(number2);

	printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}

 

 

 

 

 

 

코드 분석

단계 과정
main 수 number의 값을 초기화시킨다.
solution함수를 호출한다.
solution 주어진 수와 뒤집은 수의 차를 저장할 변수 answer를 선언한다.
변수 digit를 선언하고 func_b를 호출한다.
func_b func_b는 주어진 수가 몇 자리 수인지 count하는 함수이다.
count할 변수로 ret를 선언한다.

while문을 사용하여
number를 계속 10으로 나누어서 나눌 때마다 ret++를 진행한다.
number가 0이 되었을 때(더이상 자릿수를 뺄 수 없을 때) 반복을 종료하고, ret를 return한다.
solution 변수 convert_number를 선언하고 func_c를 호출한다.
func_c func_c는 주어진 수를 거꾸로 만드는 함수이다.

func_b에서 구한 자릿수를 사용하여 자릿수만큼 for문을 반복한다.
number의 끝자리를 구하고, ret = ret * 10 + temp;문장을 통해 한 자리씩 추가한다.
뒤집힌 수 ret를 return한다.
solution 원래의 수 number와 뒤집힌 수 convert_number를 사용하여
func_a를 호출한다.
func_a func_a는 원래의 수 number와 뒤집힌 수 convert_number의 차를 구하는 함수이다.

if문을 사용하여 큰 값에서 작은 값의 차를 구하고, 그 값을 return한다.
solution func_a의 반환값을 answer에 저장하고, answer를 return한다.
main 결과 ret를 출력한 후 프로그램을 종료한다.

 

 

 

 

 

 

 

 

 


 

 

GroomEdu

 

COS PRO 2급 기출문제 - C언어 - 구름EDU

YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.

edu.goorm.io

 

댓글