Ottoman

BAEKJUN 11047번 [C#] 동전 0 그리고 DateTime 본문

코테풀기

BAEKJUN 11047번 [C#] 동전 0 그리고 DateTime

오토만 2024. 5. 25. 10:21

그리디 알고리즘 SILVER 4

동전 0

 

문제

준규가 가지고 있는 동전은 총 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의 배수)

출력

첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.

 

 

생각

그리디 알고리즘은 효율상관없이 되는대로 실행하면 되는거로 알고있다.

높은 단위부터 K에 뺄셈연산해서 양수나 0이 나오면 연산횟수를 늘리고 K가 0이 될 때까지 반복하자.

 

제출코드

public class CodingTest
{
    public static void Main()
    {
        Console.WriteLine(Greedy());

        int Greedy()
        {
            // 입력부

            string NandK = Console.ReadLine();
            string[] ss = NandK.Split(' ');
            int N = int.Parse(ss[0]);   // 종류
            int K = int.Parse(ss[1]);

            int calculateCount = 0;

            int[] inputNs = new int[N];
            for(int i =0; i < N; i++)
            {
                inputNs[i] = int.Parse(Console.ReadLine());
            }
            // 입력부 끝
            
            // 구현
            while (K != 0)
            {
                for (int i = inputNs.Length - 1; i >= 0; i--)
                {
                    if (K == 0) return calculateCount;
                    else if (K - inputNs[i] >= 0)
                    {
                        K -= inputNs[i];
                        calculateCount++;
                        break;
                    }
                    // Console.Write(K); Console.WriteLine(" " + calculateCount);
                }
            }
            return calculateCount;
        }
    }
}

 

 

// 소감

내 코드의 실행시간은 164ms인데 다른 사람이 한 코드는 64ms가 나온걸 보니 어떤 부분이 다른지 살펴봤는데

for(int i = 0; i < n; i++)
{
    if((k/value[i]) >= 1)
    {
        //Console.WriteLine($"{value[i]}원");
        result += k/value[i];
        k = k%value[i];
    } 
}

K의 값을 같은 i에서 뺄셈하는 횟수를 나눗셈의 몫으로 한 번에 얻어냈다.

 

 

 

 

관련 링크

탐욕 알고리즘 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

탐욕 알고리즘 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 탐욕 알고리즘(Greedy algorithm)은 최적해를 구하는 데에 사용되는 근사적인 방법으로, 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는

ko.wikipedia.org

그리디 알고리즘 - 나무위키 (namu.wiki)

 

그리디 알고리즘

그리디 알고리즘 (욕심쟁이 알고리즘, Greedy Algorithm)이란 "매 선택에서 지금 이 순간 당장 최적인

namu.wiki

Greedy Algorithm(그리디 알고리즘) 개념, 추천 문제 (tistory.com)

 

Greedy Algorithm(그리디 알고리즘) 개념, 추천 문제

저번 포스팅 #1 에서 언급했듯이 이번 포스팅은 알고리즘 유형 학습 중 첫 번째 알고리즘인 '그리디 알고리즘(Greedy Algorithm)'의 개념과 문제를 풀기 전 알아야 하는 사전 지식에 대하여 작성해보

it-college-diary.tistory.com

 

 

// DateTime

[백준] C# : 오늘 날짜 (10699번) (velog.io)

 

[백준] C# : 오늘 날짜 (10699번)

DateTime.Today : 현재 날짜 0시 0분 0초 반환DateTime.Now : 현재 년도, 월, 일, 시, 분, 초 반환문자열로 Format 설정\* \[Microsoft] 사용자 지정 날짜 및 시간 서식 문자열referencehttps://drago

velog.io

 

'코테풀기' 카테고리의 다른 글

두 원의 위치관계  (0) 2024.10.01
등차수열  (0) 2024.09.25
BAEKJUN 1302번 [C#] 베스트셀러  (0) 2024.05.18
BAEKJUN 1094번 [C#] 막대기  (0) 2024.05.17
BAEKJUN 1085번 [C#] 직사각형에서 탈출  (0) 2024.05.12