• 티스토리 홈
  • 프로필사진
    유니얼
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
유니얼
  • 프로필사진
    유니얼
    • 분류 전체보기 (295)
      • Unity (17)
        • 게임 개발 (5)
      • Unreal (24)
        • 게임 개발 (20)
      • DirectX (36)
      • 코딩테스트 (91)
        • 프로그래머스 (25)
        • 백준 (66)
      • Google Workspace (1)
      • Programing (102)
        • C# (68)
        • C++ (24)
        • JavaScript (10)
      • 게임 서버 프로그래밍 (17)
      • Web (6)
        • 슈퍼코딩 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
    등록된 댓글이 없습니다.
  • 최근 공지
    등록된 공지가 없습니다.
# Home
# 공지사항
#
# 태그
# 검색결과
# 방명록
  • [99클럽/코딩테스트 챌린지/C++] 동전 거스름돈 문제에서 그리디 접근법 활
    2024년 11월 10일
    • 유니얼
    • 작성자
    • 2024.11.10.:04
    728x90

    문제 링크 : 

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

    문제 설명

    춘향이는 2원과 5원짜리 동전만으로 손님에게 최소 개수의 동전으로 거스름돈 NNN원을 주어야 한다. 2원과 5원짜리 동전이 무한정 있을 때, 정확히 NNN원을 거슬러 줄 수 있는 최소 동전 개수를 구하는 문제이다.

    접근법

    처음에는 이 문제에 그리디 알고리즘이 필요하다는 점을 인지하지 못했지만, 문제를 분석하면서 각 단계에서 최적의 선택을 해야 함을 깨달았다.
    그리디 알고리즘을 적용하기 위한 조건은 다음과 같다:

     

    1, 큰 단위의 동전 우선 사용: 5원짜리 동전이 2원짜리보다 크기 때문에, 큰 단위인 5원짜리를 우선적으로 사용해 거슬러 줌으로써 동전 개수를 최소화할 수 있다.

     

    2, 남은 금액에 맞는 조정: 5원으로 나누어떨어지지 않는 경우에는 2원을 사용해 필요한 동전 수를 최소화한다.

    코드 설명

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main() {
        int N = 0;
    
        std::cin >> N;
    
        int count = 0;
        while (N > 0)
        {
            if (N == 1)
            {
                std::cout << -1 << '\n';
                return 0;
            }
            if (N % 5 == 0)
            {
                N -= 5;
            }
            else if (N % 2 == 0)
            {
                N -= 2;
            }
            else if (N >= 5)
            {
                N -= 5;
            }
            else if (N >= 2)
            {
                N -= 2;
            }
            count++;
        }
    
        std::cout << count << '\n';
        return 0;
    }

    배운 점

    이번 문제를 통해 그리디 알고리즘을 적용할 수 있는 조건을 명확히 이해하게 되었다. 특히, 큰 단위 선택이 전체 최소 결과를 보장할 수 있는 문제일 때 그리디 알고리즘이 적합하다는 점을 깨달았다.

    이 경험을 통해 동전 거스름돈 문제와 같은 경우, 큰 단위 동전부터 사용하는 전략이 최적의 선택임을 알게 되었고, 앞으로 유사한 문제를 만날 때 그리디 접근 방식을 쉽게 판단할 수 있을 것이다.

    결론

    이번 문제는 그리디 알고리즘을 통해 최소한의 동전 수로 거스름돈을 제공하는 최적 해법을 찾는 문제였다. 큰 단위의 동전을 우선적으로 사용하여 효율적으로 문제를 해결할 수 있었고, 그리디 접근법의 유용성을 다시 한번 체감했다. 이 경험을 바탕으로 앞으로도 최적 선택이 결과에 직접적으로 반영되는 문제에서 그리디 알고리즘을 신속하게 적용할 수 있을 것이라 생각한다.

    반응형
    다음글
    다음 글이 없습니다.
    이전글
    이전 글이 없습니다.
    댓글
조회된 결과가 없습니다.
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
목차
표시할 목차가 없습니다.
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바