티스토리 뷰

반응형



이번 포스팅은 백준 알고리즘 사이트의 2839번 설탕배달 문제를 Python 언어로 코딩해보도록 하겠습니다. 아래 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
inp = int(input())
Box = 0
while True:
    if (inp % 5== 0:
        Box = Box + (inp//5)
        print(Box)
        break
    inp = inp-3
    Box += 1
    if inp < 0:
        print("-1")
        break
cs


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


먼저 Box 변수와 inp 변수를 두고, inp 변수에는 int(input()) 을 이용해 사용자의 입력을 받고, Box 변수를 통해 발생하는 봉지수를 카운트 합니다.


while True 를 이용해 무한 루프를 만들어 줍니다.


while 문 내에 if 문을 넣어 inp 값이 5로 나눠지면 Box내에 inp 값을 5로 나눈 몫을 넣고 그 값을 프린트 한 후, while 문을 종료시킵니다.


만약 그렇지 않다면 inp 값을 3 감소시키고 Box 값을 하나 증가시켜줍니다.


여기서 파이썬 코드는 C나 다른 언어들처럼 ++ 연산자를 사용할 수 없습니다. 그렇기에 꼭 += 1 을 사용하여 1씩 증가시켜주셔야 합니다.


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



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


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



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


다음 포스팅에서 봐요 :)

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함