문제
처음에 내가 생각한 코드
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 |