본문 바로가기
Computer Engineering/백준

[백준/파이썬3/2839] 설탕 배달

by UC우공 2019. 12. 10.

풀이

와... 문제 풀다가 좌절크리.. ㅋㅋㅋㅋ

 

오답1: 처음에는 너무 단순하게 "어 그냥 5로 나눠 떨어지면 5빼고 그러다가 안되면 3으로 나눠 떨어지나 확인 후에 3을 빼면서 카운팅 하나씩 하면 되는거 아닌가" 라고 생각했는데. 그러나 3을 뺀 후에는 다시 5로 나누어지나 다시 확인을 해야한다.

sugar = int(input())
count = 0
while sugar%5 == 0 and sugar>=5:
    sugar -= 5
    count+=1
while sugar%3 == 0 and sugar>=3:
    sugar -= 3
    count+=1

if sugar == 0 :
    print (count)
else:
    print (-1)

오답2: 어, 3을 빼고 다시 올라가야되는거면 그냥 이중루프 걸면 되는건가라는 아주 1차원적인 미토콘드리아급의 생각을 하게된다....

sugar = int(input())
count = 0
while sugar%5 == 0 and sugar>=5:
    sugar -= 5
    count+=1
	while sugar%3 == 0 and sugar>=3:
    	sugar -= 3
    	count+=1

if sugar == 0 :
    print (count)
else:
    print (-1)

오답3: 이것도 실패... ㅠㅠ

sugar = int(input())
count = 0
valid = True
while sugar > 0:
    if sugar % 5 == 0:
        sugar -= 5
        count += 1
    elif sugar % 3 == 0:
        sugar -= 3
        count += 1
    elif sugar % 3 and sugar % 5:
        valid=False
        break

if valid:
    print(count)
else:
    print(-1)

정답

아예 생각을 다시 해서 반복문 안에 조건문을 넣어서 카운팅을 계속했다.

sugar = int(input())
count = 0

while sugar > 0:
    if sugar % 5 != 0:
        sugar -= 3
        if sugar < 0:
            count = -1
            break
        count += 1
    elif sugar % 5 == 0:
        count += 1
        sugar -= 5
    elif sugar % 5 != 0 and sugar % 3 != 0:
        count = -1

print(count)

 솔직히 이건 너무 코드도 어지러워 보이고 좀더 쉬운 방법 없나 구글링 결과.....

 

sugar = int(input())
count = 0
while True:
    if (sugar % 5) == 0:
        count = count + (sugar//5)
        print(count)
        break
    sugar -= 3
    count += 1
    if sugar < 0:
        print("-1")
        break

반복문(while) 문 내에 조건문(if) 을 사용하여

1. 입력값이 5로 나누어 지면 "5로 나눈 몫을 넣고" while 문을 종료.
2. 만약 그렇지 않다면 sugar 값 3 감소와 (sugar -= 3),  container 에 1을 증가 (container += 1) 해줍니다.
3. 마지막으로 while문 안에서 또다른 if를 사용해 ( container < 0 ) 이면 -1을 출력 하고 while 문을 종료

 

 

짧게 추가하자면 그냥 알고리즘 짤 때 어느게 우선순위가 높은지 결정해야되는데.

이 문제는 우선순위가

① 5로 나눠지면 5로 빼기 -> ② 5로 안나눠지면 3으로 빼보고 5로 나누기 다시 시도-> ③ 5로 안나눠져서 3을 계속 뺏는데 어느순간 0이 나오면 카운팅 출력 -> ④ 음수되면 -1 출력

 

항상 답 보고 나면 쉽다.. -ㅅ-;;;

댓글