Deep Learning/Algorithm

백준 2839

frances._.sb 2022. 3. 29. 14:09
728x90

 

#2839
n = int(input())
answer = 0
while n >= 0:
    if(n % 5) == 0:
        answer += (n // 5)
        print(answer)
        break
    n -= 3
    answer += 1
else:
    print(-1)

 

 

처음에는 이 문제를 노가다로 풀려고 했는데 줄이 너무 길어져서 다시 고민했다.

힌트를 얻기 위해 검색하던 중, 이 문제가 그리디 알고리즘이라는 것을 알게 되었다.

"그리디 알고리즘"은 잔돈 거슬러 주기에서 많이 쓰이는 알고리즘이라고 한다.

 

코드의 풀이를 하자면,

 

n을 입력 받은 후, n이 가장 큰 수인 5로 나누어진다면 바로 답을 구하고, 그렇지 않으면 -3을 해줌으로써, 3으로 한 번 나누어졌다고 생각할 수 있으므로 answer에는 1을 더해준다.

이런 식으로 계산이 계속 돌아가면 5로 몇 번 나누어졌는지와 나누어지지 않았을 때 3으로 나누게 된 수를 그대로 answer에 담을 수 있으므로 쉽게 풀리게 된다.

 

코딩은 할 수록 많은 새로운 부분을 알게 되어 복잡하고 어렵지만, 또 해결하면 이렇게 간단했나 싶은 생각이 든다.

여하튼 어렵다는 거

728x90
반응형

'Deep Learning > Algorithm' 카테고리의 다른 글

백준 3052, 1546  (0) 2022.03.31
백준 10757, 10871  (0) 2022.03.31
백준 2775  (0) 2022.03.28
백준 10250  (0) 2022.03.24
백준 2869  (0) 2022.03.23