Jinny Kong’s blog
19th KOALA 1주차 본문
우하하 19기 시작!!! *.☆⸜(⑉˙ᗜ˙⑉)⸝♡.*
심화반으로 넘어갈까 생각도 했지만 18기때 못 본 부분도 많았고, C++로 알고리즘 공부를 하려니 제약이 너무 많아서 파이썬으로 해보면 어떨까 싶어 19기는 파이썬으로 백준을 풀어보려 한다!! 이번에 방학동안 열심히 해서 파이썬으로 심화반 넘어가야지!! (‘•̀ ▽ •́ )✎
파이썬 쓰니까 확실히 간단해지는 코드들이 많은 것 같다... 진작에 할걸...!! ( ʘ̥ ʘ̥ )
18기때 풀었던 문제들이다 보니 아무래도 더 쉽게 느껴지는 감이 있는 것 같다! (뒷부분은 또 어렵겠지..( ᐪ ᐪ ))
여튼 오늘 소개할 문제는 바로...!!!
백준 2839번 : 설탕 배달
설탕을 정확히 Nkg 배달해야하는데 3kg 봉지와 5kg 봉지를 활용해서 최대한 적은 개수의 봉지로 배달해야 하는 문제이다. N이 주어지면 그에따라 배달할 수 있는 봉지의 최소개수를 출력하고, 만약 정확히 Nkg을 배달할 수 없다면 -1을 출력한다.
처음에 내가 짠 코드는 좀 (많이) 형편없다... ( • ̫ •̥ )
N = int(input())
k = N//5
e = N
for i in range(k, 0, -1):
e = N
cnt = 0
e -= i*5
while e != 0 and e > 0:
e -= 3
cnt++
if e == 0:
print(i + cnt)
goto A
else:
continue
print(-1)
A:
아무생각 없이 goto, cnt++을 썼는데 이건 전부 C에서만 쓸 수 있는거라고 한다... (바보...( ´◔ ⩊ ◔ `))
심지어 range 범위도 틀림!!! ˃̣̣̥ᯅ˂̣̣̥
N = int(input())
k = N // 5
e = N
found = False # 플래그 변수 쓰기!
for i in range(k, -1, -1):
e = N
cnt = 0
e -= i * 5
while e != 0 and e > 0:
e -= 3
cnt += 1
if e == 0:
print(i + cnt)
found = True
break
if not found:
print(-1)
그래서 파이썬 문법으로 고치고, goto 없이 플래그 변수를 사용해서 코드를 수정해보았다!!
그리고 추가로 조금 더 간단하게 짤 수 있는 방법을 알아봤다!
N = int(input())
for i in range(N // 5, -1, -1):
remain = N - (i * 5)
if remain % 3 == 0:
print(i + (remain // 3))
break
else:
print(-1)
처음엔 일단 되는 코드부터 짜보자는 마음으로 5kg 봉지를 하나씩 줄이면서 그때마다 전체에서 빼고, 또 남은 값에서 3kg씩 계속 빼는 식으로 좀 복잡하게 구현했었다. 그런데 나처럼 전체에서 5kg 봉지만큼을 빼고 거기서 또 while문 돌리면서 3kg을 하나씩 차감하는 복잡한 방식 말고, 그냥 remain이라는 변수에다가 5kg 봉지를 빼고 난 나머지를 저장한 다음 그 remain이 3으로 나누어 떨어지는지만 확인하면 되는 거였다…! (´,,•﹃ •,,`) 이렇게 간단하고 깔끔한 방법이 있는데 왜 그땐 생각 못했을까 싶고, 앞으로 문제를 풀 때는 좀 더 클린하게 짜는 방법이 없을지 먼저 고민하는 습관을 들여야겠다고 생각했다!!( • ̀ω•́ )✧
1주차는 단순히 코드만 리뷰한게 아니라 내가 어떤 방식으로 문제를 풀어갔고, 그 안에서 어떤 시행착오를 겪고, 어떤 방향으로 정리하게 되었는지를 써봤다!! 앞으로도 시간이 된다면 이런 식으로 보완점을 조금씩 찾아가면서 정리하고 싶다..! 1주차 끗~! ٩(^ᗜ^ )و ´🧡
'KOALA' 카테고리의 다른 글
| 19th KOALA 3주차 (4) | 2025.07.20 |
|---|---|
| 19th KOALA 2주차 (0) | 2025.07.13 |
| 18th Koala 8주차 (0) | 2025.05.25 |
| 18th Koala 7주차 (1) | 2025.05.18 |
| 18th Koala 5주차 (1) | 2025.05.04 |