[JAVA][Baekjoon] 11047번 동전 0

2025. 1. 7. 13:12·Coding Test/Baekjoon
728x90
반응형

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


📌 접근 방식

1️⃣ 탐욕적 선택 속성

  • 가장 큰 동전부터 최대한 사용하면, 남은 금액을 최소화할 수 있.
  • 동전의 가치가 오름차순이며, 각 동전은 이전 동전의 배수이므로 탐욕적 선택이 최적해를 보장한다.

2️⃣ 문제 풀이 전략

  • 동전 배열을 내림차순으로 탐색하며, 현재 동전으로 만들 수 있는 최대 개수를 구함
  • 남은 금액을 업데이트하며 반복
 

[알고리즘] 그리디 알고리즘(Greedy Algorithm)

📌  그리디 알고리즘이란?그리디 알고리즘(탐욕 알고리즘)은 문제를 해결하는 과정에서 현재 상황에서 가장 최선이라고 생각되는 선택을 반복적으로 하여 최적의 해를 구하려고 하는 알고리

nyeroni.tistory.com


✅ PASS CODE

import java.io.*;          // 입력/출력 처리
import java.util.Arrays;   // 배열 정렬
import java.util.StringTokenizer; // 입력 분리

public class Main {
    public static void main(String[] args) throws IOException {
        // 입력 처리
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken()); // 동전의 종류
        int K = Integer.parseInt(st.nextToken()); // 목표 금액
        int[] A = new int[N]; // 동전 배열

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            A[i] = Integer.parseInt(st.nextToken()); // 동전 가치 입력
        }

        // 동전 개수 계산
        int count = 0; // 필요한 동전 개수
        for (int i = N - 1; i >= 0; i--) { // 큰 동전부터 탐색
            if (A[i] <= K) { // 현재 동전으로 K를 만들 수 있는 경우
                count += K / A[i]; // 해당 동전의 최대 개수 추가
                K = K % A[i]; // 남은 금액 갱신
            }
        }

        // 결과 출력
        System.out.println(count);
    }
}

1️⃣ 최적 동전 선택:

  • 가장 큰 동전부터 순차적으로 확인하며, 해당 동전으로 만들 수 있는 최대 개수를 count에 추가합니다.

2️⃣ 남은 금액 처리:

  • 현재 동전으로 처리한 금액을 제외한 나머지 금액(K)를 계산합니다.

반응형

😊 느낀 점

처음 문제를 보고 그리디 알고리즘을 사용하면 되겠다라고 생각했더니 간단하게 풀 수 있었다.

이 문제에서 핵심은 금액이 큰 동전부터 차례로 사용하면서 목표 금액(K)을 나누는 방식이다. 큰 동전을 먼저 사용하면 남은 금액을 최소화할 수 있고, 덕분에 동전의 개수를 최소화할 수 있었다. 금액을 나눌 때 작은 동전부터 탐색했다면 불필요한 연산이 많아졌겠지만, 큰 동전부터 탐색하면서 나누고 남은 금액만 처리하는 방식 덕분에 최소한의 연산으로 최적의 결과를 얻을 수 있었다. 😊

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > Baekjoon' 카테고리의 다른 글

[JAVA][Baekjoon] 1744번 수 묶기 🌟🌟🌟  (0) 2025.01.07
[JAVA][Baekjoon] 1715번 카드 정렬하기🌟🌟  (1) 2025.01.07
[JAVA][Baekjoon] 1300번 K번째 수 🌟🌟🌟🌟🌟  (0) 2025.01.07
[JAVA][Baekjoon] 2343번 기타 레슨 🌟  (0) 2025.01.07
[JAVA][Baekjoon] 1920번 수 찾기 🌟  (0) 2025.01.06
'Coding Test/Baekjoon' 카테고리의 다른 글
  • [JAVA][Baekjoon] 1744번 수 묶기 🌟🌟🌟
  • [JAVA][Baekjoon] 1715번 카드 정렬하기🌟🌟
  • [JAVA][Baekjoon] 1300번 K번째 수 🌟🌟🌟🌟🌟
  • [JAVA][Baekjoon] 2343번 기타 레슨 🌟
예롱메롱
예롱메롱
  • 예롱메롱
    예롱이의 개발 블로그
    예롱메롱
  • 전체
    오늘
    어제
    • 전체보기 (274)
      • 프로젝트 (35)
        • Wedle (12)
        • 인스타그램 클론 코딩 (13)
        • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (10)
      • 인프런 Spring 강의 정리 (79)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (7)
        • Spring 핵심 원리 - 기본편 (9)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (8)
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편 (11)
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리.. (6)
        • 실전! 스프링 부트와 JPA 활용2 - API 개.. (5)
        • 실전! 스프링 데이터 JPA (7)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (7)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (11)
        • 실전! Querydsl (8)
      • Cloud (3)
      • Spring (6)
        • spring boot (5)
        • 소셜로그인 (1)
      • Docker (2)
      • DevOps (0)
      • Coding Test (114)
        • Programmers (37)
        • Baekjoon (76)
      • KB It's Your Life 6기 (1)
      • CS (18)
        • 알고리즘 (13)
        • 컴퓨터 구조 (1)
        • Operating System (0)
        • Network (0)
        • Database (4)
      • git (1)
      • Language (15)
        • Java (5)
        • C++ (6)
        • Python (4)
    • GITHUB GITHUB
    • INSTAGRAM INSTAGRAM
  • hELLO· Designed By정상우.v4.10.3
예롱메롱
[JAVA][Baekjoon] 11047번 동전 0
상단으로

티스토리툴바