코딩 테스트 스터디/백준

[브론즈 I] 2389번. 설탕 배달

남쪽마을밤송이 2022. 2. 10. 19:24

 문제 

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

 

2839번: 설탕 배달

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

www.acmicpc.net

 사용 언어 

Python3

 풀이 과정 

내 머릿속의 로직대로 구현했는데 아무리 봐도 코드가 마음에 안들어... 어쨌든 한 번에 뜬 맞았습니다!!

 제출 답안 

N = int(input())

if N%5 == 0: # 5의 배수일 경우 바로 최소 봉지
  print(N//5)
else:
  for i in range(0, 10): # 3의 배수 하나씩 빼면서 5의 배수 여부 확인
    if N-3*i < 0: # 음수면 조합 불가능하다는 뜻
      print(-1)
      break
    elif (N-3*i)%5 == 0: # 5의 배수가 됐을 때
      if N%3 == 0: # 3의 배수도 맞으면
        a = N//3
        b = (N-3*i)//5+i
        print(min(a, b)) # 두 조합 중 작은 값 출력
        break
      else: # 3의 배수는 아니면
        print((N-3*i)//5+i) # 바로 출력
        break
    else: # 5의 배수가 아니라면 다음 for문
      continue

 다른 사람 답안 

나도 음수일 때의 조건 때문에 while문으로 바꾸려다가 print(-1)을 넣을 곳이 마땅치 않아 그대로 for문을 사용했는데, 이 분은 while~else문을 사용했다. 이런게 있는줄 몰랐지...

sugar = int(input())

bag = 0
while sugar >= 0 :
    if sugar % 5 == 0 :  # 5의 배수이면
        bag += (sugar // 5)  # 5로 나눈 몫을 구해야 정수가 됨
        print(bag)
        break
    sugar -= 3  
    bag += 1  # 5의 배수가 될 때까지 설탕-3, 봉지+1
else :
    print(-1)

출처: https://ooyoung.tistory.com/81

 

while~else문에서는 while문의 조건식이 거짓으로 판정됐을 때 else절이 수행된다. 만약 break 문에 의해서 반복이 끝난다면 (for 반복문과 마찬가지로) else절은 수행되지 않고 그 바깥으로 빠져나가게 된다.

 

따라서 구해지지 않는 조합을 편하게 빼주었고 while문을 사용한다고 하더라도 최대 9번까지 실행되는 안에서 값이 나오거나 음수가 되거나 할 것이기 때문에 실행 시간 상 딱히 문제가 없다.

나처럼 설탕 무게를 그대로 두고 괜히 곱하기를 사용해서 코드만 복잡해지고 가독성도 떨어지는 것보다😂,

훨씬 보기 편하고 깔끔한 코드인 것 같다!

'코딩 테스트 스터디 > 백준' 카테고리의 다른 글

[실버 IV] 1120번. 문자열  (0) 2022.02.16
[실버 V] 11723번. 집합  (0) 2022.02.15
[브론즈 IV] 10162번. 전자레인지  (0) 2022.02.10
[실버 IV] 1475번. 방 번호  (0) 2022.02.10
[실버 IV] 2108번. 통계학  (0) 2022.02.06