새소식

💻 Computer/🐘 Algorithm

[Algorithm] 2839 설탕 배달

  • -
문제

문제

 

 

처음에 내가 생각한 코드
N = int(input())

count = 0
a = N % 5

if a == 0:
    count = N/5
elif a % 3 == 0:
    count = (N/5) + a/3
else:
    for i in range(1, N):
        b = (N - (3*i))
        if b % 5 == 0 and b >= 0 :
            count = i + b/5
            break;
        else:
            count = -1

print(int(count))

1. 5의 배수 먼저 거르고

2. 3의 배수 거르고

 

3. 위의 둘에서 걸러지지 않았다면 1, N까지 반복하며 N에서 -(3 * i)를 해줌

만약 해준 결과값에서 % 5 (5의 나머지)를 구해서 0이 나오면 count에  i + 5를 해줌

 

4. 만약 모두 아니면 1 ~  N까지 반복된다는 최악의 경우가 있음

 

여기까지가 내가 생각한 코드이다.

답은 맞다고 떴으나 내가 만족 하지 못해 다른 풀이를 찾아보았다

 

다른 사람의 풀이
N = int(input())

a = N // 5
b = N % 5
cnt = 0

while a >= 0:
    if b % 3 == 0:
        cnt = a +(b // 3)
        break
    a -= 1
    b += 5

if cnt > 0:
    print(cnt)
else:
    print(-1)

1. a = 5로 나눈 몫, b = 5로 나눈 나머지,

 

2. 몫이 0보다 크다면 반복

3. 만약 b를 3으로 나눈 나머지가 0이라면  cnt = a+ (b//3)

4. 아니라면  a-=1, b+=5

 

그리고 출력

 

알고리즘을 통해 배운 점

1. a = N // 5, b = N % 5에서

[ a - 1 = b + 5]

너무 당연한 거지만 이렇게 사용할 수 있다는 것을 처음 알았다

 

2. While문 다음에 else가 나온다면

While문이 실행되지 않았을 때 else가 실행된다.

이건 처음 알았다.

나의 문제점

1. 너무 복잡하게 푼 것 같다 다음부터는 좀 간략하게 풀 필요가 있어 보인다.

 

2. 규칙을 찾아라 없으면 만들어라 

 

3. 오래 생각해라, "어떻게든 넌 풀겠다.."라고 생각해라 오늘처럼 

'💻 Computer > 🐘 Algorithm' 카테고리의 다른 글

[Algorithm] 백준 1929  (0) 2022.08.13
[Algorithm] 백준 2581 소수  (0) 2022.08.12
[Algorithm] Fibonacci  (0) 2022.08.08
[Algorithm] 백준 1193 분수찾기  (0) 2022.08.05
[Algorithm] 백준 1712 - 손익분기점  (0) 2022.08.04
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.