1시간 소요 / X
n = int(input()) a, b = 3, 5 result = 0 if n % b == 0 or n % a == 0: if n % b == 0: result = n // b print(result) else: if (n%b)%a == 0: result = n//b + (n%b)//a print(result) else: result = n//a print(result) else: <----- 여기서 막힘 if (n % b) % a == 0: result = n // b + (n % b) // a print(result) else: print(-1)
너무 당연하게 조건문으로 접근을 했다. 작성을 하면서도 조건문이 너무 복잡해지는것을 느꼈다. 첫번째 조건문에서의 else부분에서 막혔다.
우선 11이 입력되면 11=3+3+5 로 떨어지기 때문에 3이 출력되어야 한다. 그렇지만, 내가 작성한 코드는 11을 5로 먼저 나누고 결국 1이 남아서 -1이 출력된다. if (n % b) % a == 0:
이 부분을 if (n % b) % a == 0 or (n % a) % b:
3으로 먼저 나눈것도 고려한다고 하더라도 11을 3으로 나누면 2가 남아서 또 -1이 출력된다.
---> 나누는 개념으로 접근을 하면 안되는건가? 라는 생각이 들었는데, 나누지 않는다면 어떤식으로 풀어나가야하지?? 에서 막힘 (。_。)
sugar = int(input()) bag = 0 while sugar >= 0 : if sugar % 5 == 0 : bag += (sugar // 5) print(bag) break sugar -= 3 bag += 1 else: print(-1)
1) if-else 구문은 알고 있었지만, while-else 처럼 if가 없어도 else를 활용할 수 있는지 몰랐다. else구문은 while조건이 거짓이 되었을 때 실행된다.
while sugar >= 0 :
// else:
설탕이 음수가 될때 실행이 된다.
설탕이 음수가 된다. = 3을 계속 빼주더라도 5의 배수가 되지 않는다.
2) sugar -= 3
5의 배수가 될때까지 3을 빼주는while문을 반복한다. 3을 뺀다는 것은 3kg 봉지에 해당하므로 bag += 1
3을 뺄때마다 봉지를 하나씩 늘려간다.
3) 5의 배수가 아니어도 3을 계속 빼다보면 5의 배수에 도달하게 된다. if sugar % 5 == 0 :
설탕이 0이 되어도 이 구문은 0을 출력하므로 실행이 되고, print(bag)
결과를 출력하게 된다.
6 입력 >> 설탕 6-3=3 / 봉지 0+1=1 >> 설탕 3-3=0 / 봉지 1+1=2 >> (설탕이 0이므로 if sugar % 5 == 0 :
조건을 충족하여 if 구문 실행) >> 2 출력
4 입력 >> 설탕 4-3=1 / 봉지 0+1=1 >> 설탕 1-3=-2 / 봉지 1+1=2 >> 설탕이 음수이므로 else구문 실행 >> -1 출력
11 입력 >> 설탕 11-3=8 / 봉지 0+1=1 >> 설탕 8-3=5 / 봉지 1+1=2 >> (5의 배수라는 조건을 충족하여 if구문 실행) >> 봉지 2+(5//5)=3 >> 3 출력
이렇게 간단하게 작성이 될 줄은 생각지도 못했다... இ௰இ
나는 나눌 수 있을때까지 최대한 나누는게 우선이라 생각했다. 이런 생각은 11같은 경우를 생각해보면, 잘못된 결과가 나오게된다. 3보다 큰 수인 5로 많이 나누어야 봉지가 "최소"개수에 수렴은 하겠지만, 먼저해야하는 연산은 아니다.
1이 될때까지(-1을 하거나 나누거나)라는 비슷하게 접근하는 문제를 풀어본 적이 있다. 그 문제와 비슷한데, 아예 다르게 접근했다는게 충격적이다....