영드로이드개발자
용이의 개발블로그
영드로이드개발자

블로그 메뉴

  • ⭐️ Home
  • 💻 GitHub
  • ❤️ Instagram
  • 👍 LinkedIn
  • 분류 전체보기 (44)
    • 공지사항 (1)
    • Daily 공부방 (0)
    • 프로그래밍 언어 (8)
      • Java (7)
      • Kotlin (1)
    • 안드로이드(Kotlin) (16)
    • 코딩테스트(Java) (11)
      • 기초 자료구조 (3)
      • 백준 (0)
      • 프로그래머스 1단계 (5)
      • 프로그래머스 2단계 (3)
    • 알고리즘 정리 (5)
    • 주간 목표계획 및 회고 (2)
    • Project (1)
      • Android App - 오마이코인 (1)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
영드로이드개발자
알고리즘 정리

[그리디 알고리즘] 그리디 알고리즘의 설명과 간단한 코테 예제풀이

[그리디 알고리즘] 그리디 알고리즘의 설명과 간단한 코테 예제풀이
알고리즘 정리

[그리디 알고리즘] 그리디 알고리즘의 설명과 간단한 코테 예제풀이

2022. 9. 18. 22:33
반응형

그리디알고리즘(Greedy Algorithm)

그리디(Greedy)란 '탐욕스러운, 욕심 많은' 이란 뜻이다.

그리디 알고리즘은 선택의 순간마다 당장 눈앞에 보이는 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방식이다.

하지만 순간의 최적의 선택을 한다고 해서 최종적인 해답이 최적이라는 보장이 없다.

따라서 그리디 알고리즘을 적용할 수 있는 문제들은 지역적으로 최적이면서 전역적으로도 최적인 문제들일때 그리디 알고리즘을 적용할 수 있다.

 

여기서 가장 중요한 점은 그리디 알고리즘을 이용하면 최적해를 찾지 못할 수 도 있다는 것을 항상 명심해야한다.

 

그렇다면 그리디 알고리즘을 적용하여 최적해를 구할 수 있는 문제는 어떤 조건을 만족할까?

1. greedy choice property : 현재 선택이 이 후의 선택에 영향을 주지 않는다.

2. optimal substructure : 매 순간의 최적의 해가 문제 전체에 대한 최적의 해여야 함

 

하지만 위 조건이 만족하지 않아도 그리디 알고리즘을 근사 알고리즘으로 사용하는 경우가 있다.

그리디 알고리즘은 계산 속도가 매우 빠른 알고리즘 중 하나이므로 물론 지역적으로 최적의 선택을 반복하기 때문에 전체적인 최적해를 보장하지는 못하더라도 어느 정도까지 최적에 가까운 해를 구할 수는 있다. 이렇든 어느 정도 적합한 수준의 해답을 알려주기 때문에 근사 알고리즘으로 그리디 알고리즘을 사용하는 경우가 있다.

 

문제

준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.

동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.

 

 

입력

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)

둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

 

 

 

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		int K = sc.nextInt();
		
		int[] arr = new int[N];
		
		for(int i=0; i<N; i++) {
			arr[i] = sc.nextInt();
		}
		
		int count = 0;
		
		for(int i=N-1; i>=0; i--) {
			
			if(arr[i] <= K) {
				count = count + (K / arr[i]);
				K = K % arr[i];
			}
		}
		System.out.println(count);
	}
}
반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 정리' 카테고리의 다른 글

[백트래킹] 백트래킹의 설명과 간단한 예제풀이  (0) 2022.09.19
[BFS] BFS의 설명과 간단한 예제풀이  (1) 2022.09.19
[DFS] DFS의 설명과 간단한 예제풀이  (1) 2022.09.19
[브루트 포스] 브루트 포스의 설명과 간단한 코테 예제풀이  (1) 2022.09.14
  • 그리디알고리즘(Greedy Algorithm)
  •  
  • 문제
  • 입력
'알고리즘 정리' 카테고리의 다른 글
  • [백트래킹] 백트래킹의 설명과 간단한 예제풀이
  • [BFS] BFS의 설명과 간단한 예제풀이
  • [DFS] DFS의 설명과 간단한 예제풀이
  • [브루트 포스] 브루트 포스의 설명과 간단한 코테 예제풀이
영드로이드개발자
영드로이드개발자
도전을 즐기는 안드로이드 개발자 현영우의 개발 Blog

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.