[백준11047 - Java] 동전 0 Greedy 알고리즘으로 풀

2024. 3. 26. 00:48·문제 풀이/백준 문제풀이
728x90
반응형
SMALL

Greedy알고리즘 이란?

🎯최적의 값을 구해야 하는 상황에서 사용된다.

🎯각 단계에서 최적이라고 생각되는 방법으로 값을 반환해 나가는 방식이다.

🎯주로 문제를 분할 가능한 문제들로 분할한 뒤, 각 문제들에 대한 최적의 답을 구한 뒤 이를 결합하여 전체 문제의 최적의 값을 구하는 경우 사용한다.

쉽게 말해서 규칙을 파악하고 그 규칙을 메서드화 한 후 반복수행하여 값을 구하는 방식이라고 할 수 있다.

 

위 문제에서 규칙을 파악하기 위해 예시를 봐보자.

 

 

예상해볼 수있는 규칙

1. 4200원보다 큰 숫자는 무시해도 된다.

2. i>=2인 경우에는 A의i번째는 Ai-1의 배수라고 하였다. 각 숫자들은 배수관계라는 것을 알 수있다.

예를 들어 10(A의 3번째)은 5(A의 2번째)의 배수이다.

 

우리는 최소한의 연산을 통해 4200원을 만들어야 한다.

머릿속으로 기계적으로 생각해보자.

1. 가장 큰 돈인 1000원이 4개 있으면 4000원이다. 

2. 나머지 돈은 200원이 남는다.

3. 그 다음 큰돈은 500원이다. 200원보다 크므로 넘어간다.

4. 그 다음 큰돈은 100원이다. 100원이 2개 있으면 200원으로 4200원이 완성된다.

 

위 4단계에서 규칙을 찾아보자.

1. 가장  큰 수를 찾아 주어진 값에서 나눈다. (4200/1000 =4) 4번의 반복을 수행했다.

2. 그럼 200원이 남는다. (4200%1000 =200)

[반복 발생]

3. 200원과 같거나 더 작은 숫자를 가져와 다시 나누고 나머지를 구한다.(200/100=2) 2번의 반복 수행, (200%100=0)

3. 200원이 100원 두개를 추가함으로써 반복이 종료된다.

 

 

[코드로 구현]

package greedy;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class GreedyP11047 {
    /*
    * 1. 오름차순으로 주어진 금액중 K원보다 많은 수가 입력될경우 break
    * 2. 최대값을 반복해서 더한 후 목표값에서 나눈다. 반복할때마다 cnt증가
    * 3.  나머지가 있을 경우 그다음 큰값에서 2번을 반복
    * 4. 목표값이 0이 될때까지 수행한다.
    * */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int K = sc.nextInt();
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < N; i++) {
            int x = sc.nextInt();
            if(x<=K){
            list.add(x);
            }
        }
        list.sort(Collections.reverseOrder());

        findMinCnt(list,K);
    }

//반복되는 과정을 메서드로 구현
    private static int findMinCnt(List<Integer> list, int k) {
        int cnt =0;
        int idx =0;
        while (k > 0) {

            cnt += k/list.get(idx);
            k = k % list.get(idx);
            System.out.println(cnt);
            System.out.println(k);
            idx ++;
        }

        return cnt;
    }
}

 

 

728x90
반응형
SMALL

'문제 풀이 > 백준 문제풀이' 카테고리의 다른 글

[백준1157- Java] 구현 - 단어 공부  (0) 2024.04.23
[백준11047 - Java] 구현 - 주사위 굴리기  (1) 2024.04.23
[백준12789-자바/우선순위큐] 도키도키 간식드리미  (0) 2024.03.20
[백준 1427 - 자바/ 선택정렬] 소트인사이드  (0) 2024.03.20
[백준 - 1715/ java] 카드정렬하기 - 우선순위 큐  (0) 2024.03.18
'문제 풀이/백준 문제풀이' 카테고리의 다른 글
  • [백준1157- Java] 구현 - 단어 공부
  • [백준11047 - Java] 구현 - 주사위 굴리기
  • [백준12789-자바/우선순위큐] 도키도키 간식드리미
  • [백준 1427 - 자바/ 선택정렬] 소트인사이드
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
IT - railroadIT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (317)
      • 면접 준비 (38)
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (10)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      레디스
      JavaScript
      자바 면접질문
      자바 면접
      HTML
      spring redis
      JS
      Springframework
      springsecurity
      백준
      jsp기초
      jsp request
      JSP
      Spring Data Redis
      자바 알고리즘
      자바
      CSS
      리눅스마스터2급정리
      스프링프레임워크
      Spring
      리눅스마스터2급
      redis 채팅
      Til
      자바스크립트
      자바기초
      리눅스
      redis
      자바 반복문
      java
      프로그래머스
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [백준11047 - Java] 동전 0 Greedy 알고리즘으로 풀

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인
    상단으로

    티스토리툴바

    단축키

    내 블로그

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

    블로그 게시글

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

    모든 영역

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

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