티스토리 뷰

반응형



이번 포스팅은 백준 알고리즘 사이트의 2839번 설탕배달 문제를 C 언어로 코딩해보도록 하겠습니다. 아래 url로 접속하시면 문제를 볼 수 있습니다.


https://www.acmicpc.net/problem/2839


지난 백준 알고리즘 포스팅과 같은 단계로 사칙연산 도전하기 단계의 마지막 문제입니다.



이번 문제는 사용자로부터 설탕 무게를 입력 받고 3kg과 5kg 봉지를 최소로 사용해 담으면 몇봉지가 나오는지를 계산하는 문제로, 만약 정확히 떨어지지 않는다면 -1을 반환하는 문제입니다.


먼저 문제 해결을 위한 알고리즘을 아래 단계별로 나타내었습니다.


1) 5kg 에 설탕을 빠짐없이 담을 수 있다면 (입력 값이 5로 나눠떨어진다면) 입력값을 5로 나눈 몫을 출력하고 프로그램 종료

2) 5kg 에 설탕을 빠짐없이 담을 수 없다면 3kg 봉지에 한 번 담기 (봉지 카운트는 1 증가, 입력값은 3 감소)

3) 만약 입력값이 0보다 작아지면 -1을 출력하고 프로그램 종료


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
void main() {
    int Box = 0, input;
    scanf("%d"&input);
 
    while (1) {
        if (input % 5 == 0) {
            Box += input / 5;
            printf("%d", Box);
            break;
        }
 
        input = input - 3;
        Box++;
 
        if (input < 0) {
            printf("-1");
            break;
        }
    }
}
cs


문제의 알고리즘을 코드로 옮겨적으면 위 코드처럼 됩니다.


먼저 Box 변수와 input 변수를 두고, input 변수는 입력을 받기위해, Box는 박스수를 세기위해 0으로 초기화하여 줍니다.


scanf를 통해 사용자로부터 총 무게를 입력받고 무한 루프를 만들어줍니다.


if 문을 사용해 input 값이 5로 나눠지면 Box에 input을 5로 나눈 값을 넣고 그 값을 프린트 한 후 while 문을 종료시킵니다.


만약 그렇지 않을 경우 총 무게 input 값에서 3을 빼고 Box 값을 하나 증가시켜 줍니다.


또다른 if를 사용해 input 값이 0보다 작아지면 -1을 출력하고 while 문을 종료시켜줍니다.



이번 포스팅에서는 사칙연산 단계의 마지막 문제를 풀어보았는데, 알고리즘을 조금 생각해야 하는 문제였습니다.


다른 방법으로도 접근이 가능하니 다른 코드 작성도 가능할 것 같습니다.



오늘도 포스팅 봐주셔서 감사합니다.


다음 포스팅에서 봐요 :)

반응형

'BaekJoon > C' 카테고리의 다른 글

[BaekJoon/C] 백준 2742번 기찍 N  (0) 2018.09.12
[BaekJoon/C] 백준 2741번 N 찍기  (0) 2018.09.12
[BaekJoon/C] 백준 10869번 사칙연산  (0) 2018.09.03
[BaekJoon/C] 백준 1008번 A/B  (0) 2018.09.03
[BaekJoon/C] 백준 10998번 A×B  (0) 2018.09.03
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함