정현수
현수 세상
정현수
전체 방문자
오늘
어제
반응형
  • 분류 전체보기 (267)
    • NEXTSTEP 자바스크립트 클린코드 2기 (1)
    • 우테코 4기 (6)
    • 회고록 (5)
    • 개발지식 (6)
    • React (3)
      • React Clone Coding (3)
    • React Native (2)
    • Kubernetes & Docker (36)
      • 궁금한 것 (13)
    • Flutter (2)
    • 알고리즘 (168)
      • 프로그래머스 1단계 (27)
      • 프로그래머스 2단계 (37)
      • 백준 (98)
      • 이론 (6)
    • 자료구조 (3)
    • 유튜브 (1)
    • 책 읽자 (1)
    • 취업준비 (1)
    • 대내 활동 (31)
      • 2022년 겨울방학 알고리즘 특강 (0)
      • 2020년 여름방학 모각코 (13)
      • 2020년 겨울방학 모각코 (13)
      • 웹프로그래밍 상상튜터링 (5)

인기 글

최근 글

공지사항

  • 블로그 이동

태그

  • React
  • Deployment
  • 레플리카셋
  • 노드
  • 쿠버네티스
  • flutter
  • NodePort
  • 우테코
  • docker
  • 모각코
  • 자바스크립트
  • image run
  • Jenkins
  • javascript
  • programmers
  • 이코테
  • image pull
  • Kubernetes
  • 리액트
  • 디플로이먼트
  • 그리디
  • 파이썬
  • mysql
  • 알고리즘
  • kubelet
  • replicaset
  • 개발지식
  • 프로그래머스
  • 백준
  • 공식문서

최근 댓글

블로그 메뉴

  • 홈

티스토리

hELLO · Designed By 정상우.
정현수

현수 세상

[알고리즘] 그리디 알고리즘 알기
알고리즘/이론

[알고리즘] 그리디 알고리즘 알기

2021. 1. 8. 17:01
반응형

그리디 알고리즘

현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미

그리디 해법은 정당성 분석이 중요하다.

- 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토

 

매 상황에서 가장 큰 값만 고르는 것이다.

 

일반적인 상황에서는 그리디 알고리즘은 최적의 해를 보장할 수 없을 때가 많다.

(그 순간만 판단하기 때문에)

 

그리디 알고리즘을 설명하기 위해 자주 등장하는 예시 문제라고 한다.

가장 큰 단위 화폐부터 돈을 거슬러 주면 된다.

 

1260원을 거슬러 줘야한다고 할 때

500원부터 거슬러주면, 500 x 2 = 1000,

100원  => 100 x 2 = 200,

50원 => 50 x 1 = 50,

10원 => 10 x 1 = 10

이런 식으로

 

그럼 이렇게 큰 화폐 단위부터 거슬러 주는게 왜 최적의 해를 보장할까?

정당성을 항상 분석했다.

"큰 단위가 항상 작은 단위의 배수이므로 작은 단위의 동전들을 종합해 다른 해가 나올수 없다. "

라는 이유가 이 문제 해결방식에 대한 정당성 이었다.

파이썬 코드

change = 1260
count = 0

coins = [500, 100, 50, 10]

for coin in coins:
    count += change // coin
    change %= coin

print(count)

count는 몇 개의 동전을 거슬러 줄 건지에 대한 변수이다.

거스름돈을 가장 큰 단위 동전 부터 나눈 몫이 그 동전의 개수가 된다.

그리고 남은 거스름돈을 계산해야 하므로 거스름돈에서 coin을 나눈 나머지를 다시 계산해준다.

 

항상 생각을 해야한다. 어떻게 최적의 해를 구할 것인지

왜, 이렇게 하면 최적의 해가 나오는 것인지

그리고 반례를 항상 찾으려고 고민하고,

정당성을 유추하는 방식 또한 연습을 해야함을 느꼈다.

 

 

참고

유튜브 동빈나 채널 [이코테]

반응형

'알고리즘 > 이론' 카테고리의 다른 글

[자바스크립트] 그리디 (Greedy) 알고리즘  (0) 2021.08.05
[알고리즘] 이진 탐색 알고리즘 알기  (0) 2021.01.14
[알고리즘] 정렬 알고리즘 알기  (0) 2021.01.13
[알고리즘] DFS & BFS 알기  (0) 2021.01.11
[이코테] 코딩 테스트 출제 경향 분석 및 파이썬 문법 부수기  (0) 2021.01.06
    정현수
    정현수
    깃허브 : https://github.com/junghyeonsu 개인 블로그 : https://junghyeonsu.com/ (양질의 글을 올리려고 항상 노력합니다.)

    티스토리툴바