본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.58] 6차 문제 8 / cos pro 2급 c언어 기출 문제

by M개발자 2021. 5. 30.
반응형

6차 문제 8


문제 설명

 

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

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

이를 계산하기 위해 다음과 같이 프로그램 구조를 작성했습니다.
1. 주어진 수의 자릿수를 구합니다.
2. 구한 자릿수를 이용하여 주어진 수를 거꾸로 뒤집습니다.
3. 주어진 수와 뒤집은 수의 차이를 구합니다.

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

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


예시

 

number return 
120 99
23 9

코드 해석

 

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;
}

solution 함수의 흐름대로 함수 설명

 

func_b주어진 수의 자릿수를 구하는 함수로, 매개변수로 solution의 numbur를 받는다. 

 

number가 0이 아닐 동안 while문을 반복하여 number를 10으로 나누고, ret에 1을 더한다. 

120 / 10 = 12 ret = 1
12 / 10 = 1 ret = 2
1 / 10 = 0 ret = 3

 

func_b의 반환값은 3이다. 

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

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

	return ret;
}

func_c구한 자릿수를 이용하여 주어진 수를 거꾸로 뒤집는 함수이다. 

따라서 매개변수로 number와 func_b에서 구한 자릿수를 넘겨야 한다.

 

for문을 digit만큼 반복한다.

temp에 number % 10을 저장하고 (number의 끝 자릿수)

number에는 number / 10을 저장한다. (number의 끝 자릿수를 뺀 값)

ret은 ret * 10 + temp로 number의 마지막 자릿수가 첫 번째 자릿수가 된다. 

i temp number ret
0 120 % 10
= 0
120 / 10
= 12
0 * 10 + 0
= 0
1 12 % 10
= 2
12 / 10
 = 1
0 * 10 + 2
= 2
2 1 % 10
= 1
1 / 10
= 0
2 * 10 + 1
= 21

따라서 func_c의 반환 값이자 number를 뒤집은 수는 21이다. 

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;
}

 

func_a주어진 수와 뒤집은 수의 차이를 구하는 함수로 

매개변수로는 원래의 number와 func_c에서 구한 number를 뒤집은 수를 받는다. 

 

number 1은 본래의 수, number 2는 뒤집은 수로

number 1이 number 2보다 크다면 number 1에서 number 2를 빼고, 

그렇지 않다면 (number 2가 더 크다면) number2에서 number1을 뺀다.

 

number1 = 210, number2 = 21

ret = 210 - 21 = 99

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

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

	return ret;
}

 

전체 코드

#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);
}

cos pro 2급 기출문제

github

 

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

 

 

 

 

반응형

댓글