티스토리 뷰

문제

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

 

 

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.

출력

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

예제 입력

472
385

예제 출력

2360
3776
1416
181720

출처: Olympiad > 한국정보올림피아드 > 한국정보올림피아드시․도지역본선 > 지역본선 2005 > 초등부 2번

해설

사칙 연산 문제에서 언급했던 나머지 연산의 활용법에 대한 아이디어를 얻을 수 있는 문제이다. 그리고 scanf() 함수를 사용할 때 유의해야 할 점도 아울러 살펴보도록 하겠다.
먼저 첫 번째 정수(472)와 두 번째 정수의 각 자리 유효 숫자(3, 8, 5)와의 곱을 각각 출력해야 합니다. 마지막으로 두 정수의 곱셈 결과를 출력해야 합니다. 그렇다면 두 번째 정수에서 각 자리의 유효 숫자를 어떻게 구해야 할까? 두 번째는 문자열로 받아서 각 배열에 들어있는 문자를 숫자로 변환하는 방법? 배보다 배꼽이 큰 격이겠다. 정말 코딩계의 '견문발검'이 아닐까. 이전 문제에서 알아봤던 연산자를 적절히 이용하면 원하는 값을 간단히 얻을 수 있다. 자, 고민의 시간….
먼저 백의 자리의 숫자는 두 번째 정수를 100으로 나눈 몫을 구하면 된다(second_num / 100)). 그렇다면 십의 자리의 숫자는 어떻게 구할 수 있을까? 먼저 백의 자리를 없애기 위해서 두 번째 정수를 100으로 나눈 나머지를 구하고 이 나머지를 다시 10으로 나눈 몫을 구하면 된다((second_num % 100) / 10). 마지막으로 일의 자리의 숫자는 두 번째 정수를 10으로 나눈 나머지를 구하면 된다(second_num% 10). 이렇게 각 자리의 유효 숫자를 구하면 나머지는 일사천리다. 젓 번째 정수에 각 자리의 숫자를 곱해 각각 출력한 다믄 첫 번째 정수와 두 번째 정수의 곱을 출력하면 끝이다.

c에서 scanf() 함수를 사용할 때 주의할 부분은 표준 입력(키보드)으로 받은 문자열은 버퍼에 들어가게 되고 scanf()는 이 버퍼에서 값을 가져온다는 점이다. 첫 번째 정수 입력 시 버퍼에는 프로그램에 전달하기 위해 정수 외에 enter까지 저장되게 된다. 첫 번째 scanf()가 첫 번째 정수를 가져온 다음 버퍼가 비어 있다면 문제가 생기지 않는데 무엇(enter)이 남아 있게 된다. 버퍼의 상황이 이러하면 다음 scanf()는 다음 입력값(두 번째 정수)를 가져오는 것이 아니라 남은 무엇을 먼저 가져오게 된다. 즉 두 번째 scanf()는 두 번째 정수를 받아오지 못하고 enter를 받아오게 되는 문제가 발생한다. 따라서 이 enter를 적절하게 처리하지 않으면 두 개의 정수를 scanf()로 원하는 변수에 대입하지 못하게 된다. 아래의 코드에서는 char형 변수 trash를 선언하여 첫 번째 scanf()의 수행 이후 버퍼에 남아 있는 enter값을 받아 버리는 작업을 수행하게 된다. 이렇게 해서 두 번째 scanf() 함수가 적절히 동작할 수 있는 환경을 만들어 준 것이다. 물론 이 외에도 오버플로우 등 여러 단점이 있는 scanf()를 굳이 써야 할 필요가 있을까 싶겠다. 물론이다, 앞으로 당신이 개발할 프로그램에서는 되도록 쓰지 않도록 하고, 피치 못해 쓴다면 해당 문제점을 적절하게 보완할 코드를 함께 넣어 두어야 할 것이다. 핵심은 여기에 있는 것이다.

2019/12/11 - [Python/심사문제] - 백준(BAEKJOON): 사칙연산(10869번)

백준(BAEKJOON): 사칙연산(10869번)

문제 두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. 입력 두 자연수 A와 B가 주어진다. (1 ≤ A, B ≤ 10,000) 출력 첫째 줄에 A+B, 둘째 줄에 A-B,..

editor752.tistory.com

소스코드: c

#include <stdio.h>

int main()
{
    int first_num, second_num;
    char trash;
    scanf("%d", &first_num);
    scanf("%c", &trash);
    scanf("%d", &second_num);

    printf("%d\n", first_num * (second_num% 10));
    printf("%d\n", first_num * ((second_num % 100) / 10));
    printf("%d\n", first_num * (second_num / 100));
    printf("%d\n", first_num * second_num);
    return 0;
}

소스코드: python3

first_num, second_num = map(int, input().split())
print(first_num * (second_num% 10));
print(first_num * ((second_num % 100) / 10));
print(first_num * (second_num / 100));
print(first_num * second_num);

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함
11-25 22:18