본문 바로가기
Cospro 2급/C언어

[6차] 문제8. 주어진 수와 뒤집은 수의 차 구하기 답안 및 풀이

by SRin23 2021. 5. 30.

◇ 문제 설명

주어진 수와 주어진 수를 뒤집은 수와의 차를 계산하려고 합니다.
예를 들어 주어진 수가 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이하인 정수입니다.

 

◇ return값 설명

주어진 수 number와 number를 뒤집은 수와의 차를 return합니다. 

 

◇ 예시

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

 

◇ 예시 설명

예시 #1
문제에 나온 예와 같습니다.

예시 #2
23을 반대로 뒤집으면 32가 되고 이때 두 수의 차는 9입니다.

 

◇ 초기 내용

[출처]goormedu COSPRO 2급 기출문제 [6차] 문제8 초기내용

※ 길이가 긴 관계로 include문과 main()함수는 생략되었습니다.
    (예시를 참고해주세요)

 

 

 


◇ 답안

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

 

◇ 답안 힌트

    ▶ 문제에서 주어진 프로그램 구조를 따라 작성하세요

    ▶ (어떤수) % 10은 그 수의 일의 자리값을 나타내며, (어떤수)/10은 자릿수를 하나씩 내리는 역할을 합니다.

 

◇ 답안 풀이

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

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

 

    //number가 0이 아니면 아래 내용 수행
    while(number != 0) {

        // (number/10)을 하여 number의 자릿수 세기
        number = number / 10;
        ret++;
    }
    return ret;
}


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

    for(int i = 0; i < digit; i++) {

        //temp에 number%10, 즉 number의 1의자리수 저장
        int temp = number % 10;

        //number를 나누기 10 해서 자릿수 하나씩 내리기

        //ex. 12345 % 10 = 5(일의 자리수 추출), 12345/10 = 1234(한자리씩 추출후, 제거) -> 반복
        number = number / 10;

        //추출한 일의 자리수에 자릿수를 더해 number를 반대로 뒤집은값 만들기
        ret = ret * 10 + temp;
    }
    return ret;
}


int func_a(int number1, int number2) {
    int ret = 0;
    //원래 수와 뒤집은 수의 크기 비교 후, (큰값) - (작은값)구해서, 둘의 차 구하기
    if(number1 > number2)
        ret = number1 - number2;
    else
        ret = number2 - number1;


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

 

◇ 실행결과

[6차] 문제8) 주어진 수와 뒤집은 수의 차 구하기 실행결과

 

◇ 출처

https://edu.goorm.io/learn/lecture/16921/cos-pro-2%25EA%25B8%2589-%25EA%25B8%25B0%25EC%25B6%259C%25EB%25AC%25B8%25EC%25A0%259C-c%25EC%2596%25B8%25EC%2596%25B4

 

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

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

edu.goorm.io

 

댓글