코딩공부/알고리즘

그리디greedy , 구현

뉼👩🏻‍💻 2023. 1. 27. 22:50
728x90
반응형
SMALL

 

📍그리디 Greedy  = 욕심쟁이 알고리즘 = 탐욕법

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

 

- 기준에 따라 좋은 것을 선택하는 알고리즘 

➡️ 코테 문제에서 '가장 큰 순서대로', '가장 작은 순서대로' 와 같은 기준을 제시해줌 

 

https://www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

 

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
	
		 int N = sc.nextInt();
				
			if (N == 4 || N == 7) {
				System.out.println(-1);
			}
			else if (N % 5 == 0) {
				System.out.println(N / 5);
			}
			else if (N % 5 == 1 || N % 5 == 3) {
				System.out.println((N / 5) + 1);
			}
			else if (N % 5 == 2 || N % 5 == 4) {
				System.out.println((N / 5) + 2);
			}
	}
}

 

 

* 최적의 해 

: 대부분의 문제는 그리디 알고리즘을 이용했을 때 '최적의 해'를 찾을 수 없을 가능성이 다분함 

- 대부분의 그리디 알고리즘 문제에서는 문제풀이를 위한 최소한의 아이디어를 떠올리고 이것이 정당한지 검토할 수 있어야 한다 

➡️ 그리디 알고리즘으로 얻은 값이 정말 최적의 선택지인지 추론해야 함 

예를 들어 거스름돈 문제에서 큰 동전을 우선하여 배분한 경우가 무조건 거스름돈이 가장 적게 나오는 경우라도 할 수 없다

 

 

 

◼️ '수열' 파악하기 

- 반복되는 수열이 나타나는 문제인지 확인하기 

 

◼️ 적절한 함수 사용하기 

- sort(), min()등 계산을 빠르게 해주는 함수 활용 

 

 

 

 

 

📍구현 implementation 

: 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정 

- 어떤 문제를 풀든 간에 소스코드를 작성하는 과정은 필수이므로 구현 문제 유형은 모든 범위의 코딩 테스트 문제 유형을 포함하는 개념

- 사소한 입력 조건 등을 문제에서 명시해주며 문제의 길이가 꽤 긴 편 

 

 

- '이것이 코딩테스트다' 책에서는 완전탐색과 시뮬레이션 유형을 '구현'으로 묶어둠 

 

*완전 탐색

: 모든 경우의 수를 주저 없이 다 계산하는 해결 방법

 

* 시뮬레이션 

: 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행 

 

◼️  방향 Direction 을 설정해서 이동하는 문제

- 일련의 명령에 따라 개체를 차례대로 이동시키는 문제 

➡️ dx, dy라는 별도의 리스트를 만들어 방향을 정하는 것이 효과적 

; 하나의 배열을 만들어서 반복문을 이용하여 모든 방향을 차례대로 확인할 수도 있음 

 

728x90
반응형