강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

조영상님의 프로필 이미지
조영상

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

5. 동전교환(냅색 알고리즘)

이런 풀이는 어떨까요

작성

·

10

0

import java.util.*;
import java.util.stream.*; 

class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        List<Integer> coins = new ArrayList<>();
        for (int i=0; i<num; i++) {
            coins.add(in.nextInt());
        }

        int target = in.nextInt();

        in.close();

        Set<Integer> isVisited = new HashSet<>();
        Map<Integer, List<Integer>> countByCoins = new HashMap<>();

        for (Integer coin : coins) {
            if (coin == target) {
                System.out.print(1);
                return;
            } else {
                isVisited.add(coin);
            }
        }

        countByCoins.put(1, new ArrayList<Integer>(coins));

        int start = 2;
        while (true) {
            List<Integer> valuesByBefore = countByCoins.get(start - 1);
            List<Integer> newList = new ArrayList<>();
            for (Integer before : valuesByBefore) {
                for (Integer coin : coins) {
                    int sum = before + coin;
                    if (sum == target) {
                        System.out.print(start);
                        return;
                    }

                    if (!isVisited.contains(sum)) {
                        isVisited.add(sum);
                        newList.add(sum);
                    }
                }
            }
            countByCoins.put(start, newList);
            start++;
            // System.out.println(countByCoins);
        }
    }
}

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

조영상님께서 제시하신 코드는 다양한 동전을 사용하여 목표 금액을 만들 수 있는 가장 적은 동전 수를 찾는 문제를 해결하려는 것 같습니다. BFS(너비 우선 탐색) 알고리즘을 활용하여 목표 금액을 만들기 위한 최소 동전 수를 구하는 방식으로 진행되고 있습니다.

특정 케이스에서 전략이 효과적일 수 있지만, 복잡도가 높아질 수 있습니다. 이 코드는 모든 가능한 합을 해시셋을 사용하여 추적하고, 단계별로 가능한 모든 합을 계산하면서 목표 금액을 달성할 때까지 접근하는 방식입니다.

비슷한 내용으로 풀어본 다른 사례와 질문들을 살펴보실 수 있는 링크를 제공해드리겠습니다:

위의 링크들은 BFS 문제를 어떻게 접근할 수 있는지에 대한 인사이트를 줄 것입니다. 질문해주신 코드도 비슷한 방법으로 문제를 해결하려고 하기에, 유용한 참고가 될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

조영상님의 프로필 이미지
조영상

작성한 질문수

질문하기