본문 바로가기

Algorithm

[알고리즘] 백준 파이썬 2839번 설탕배달 | 파이썬 입력하는 법

728x90

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

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

 

✔︎ 백준 Python 2839 설탕배달 문제

 

# 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.

# 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.

# 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

 

sugar = int(input());
bigBag = 5;
smallBag = 3;
bag = 0;

while sugar >= 0 : # 0이상일 경우만 
  if sugar % bigBag == 0 : # 5kg bag으로 나누어떨어지면 그 몫이 가방 갯수
    bag += sugar // 5
    print (bag)
    break
  sugar -= 3 # 5로 나누어 떨어지지 않으면 3키로 짜리 가방을 하나 써주고 다시 위로 올라가서 5키로로 나누어떨어지는지 확인
  bag += 1
else : # 0미만으로 내려가면
  bag = -1
  print(bag)

 

프로그래머스에서 자바스크립트로만 해보다가 백준에서 처음 파이썬으로 해보려니 어려웠다.

 

while문 조건에 맞을 때까지는 while문 안에서 돌다가, 조건을 벗어나면 else문으로 이동한다. 자바스크립트에서는 while else문이 없기 때문에 처음에는 무슨 말인지 헷갈렸다. 그리고 문단 띄어쓰기도 아직까지 조금 헷갈린다. 5키로 bag만 가져가면 될 경우에는 if 문에서 바로 끝나고, 5키로 bag에서 안 끝날 경우에는 3키로 bag을 하나 추가해주고, 다시 5키로 bag 계산해보고, 안 되면 다시 3키로 bag 추가해보는 식으로 반복한다. 만약 0이 될 때까지도 bag 개수가 나누어떨어지지 않는다면 else로 가서 -1을 출력한다.

 

syntac (문법)

% : 나머지 구하기
// : 몫 구하기
# : 주석

 

 


 

백준과 프로그래머스가 다른 점.

입력부분을 넣어주어야한다.

 

✔︎ 파이썬 입력하는 방법

// 문자를 입력 받을 때 (문자열을 받을 때)
import sys

sentence = sys.stdin.readline()

 

// 숫자 하나 입력 받을 때 (한 개의 정수를 입력받을 때)

import sys

number = int(sys.stdin.readline())

 

// 숫자 여러 개 입력 받을 때 (여러 개의 정수를 입력받을 때)

import sys

a,b = map(int,sys.stdin.readline().split())

 

sys.stdin.readline() 대신에 input()을 넣어줘도 되지만, sys.stdin.readline()이 좀 더 빠르고 메모리도 더 적게 소모한다고 한다.

이번 문제는 input()으로 했지만, 다음 문제는 sys.stdin.readline()로 해보려고 한다.

 

 

 

 

 

 

 

 

 

 

파이썬 입력 https://growingarchive.tistory.com/157

파이썬 while else 문법 https://studymake.tistory.com/209

파이썬 설탕배달 https://ooyoung.tistory.com/81

 

 

728x90