풀이
와... 문제 풀다가 좌절크리.. ㅋㅋㅋㅋ
오답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 출력
항상 답 보고 나면 쉽다.. -ㅅ-;;;
'Computer Engineering > 백준' 카테고리의 다른 글
[백준/파이썬3/2439] 별 찍기 -2 (0) | 2019.12.16 |
---|---|
[백준/파이썬3/2742] 기찍N (0) | 2019.12.13 |
[백준/파이썬3/15596] 정수 N개의 합 (0) | 2019.12.09 |
[백준/파이썬3/2562] 최댓값 (0) | 2019.12.08 |
[백준/파이썬3/10818] 최소, 최대 (0) | 2019.12.06 |
댓글