수를 여러번 사용하여 특정 수 만들기

JunHyeok Seo·2025년 3월 20일

algorithm

목록 보기
11/30

문제 개요

서로 다른 세 정수 A, B, C가 주어질 때, A와 B를 0번 이상 더해서 만들 수 있는 C 이하의 수 중 최댓값을 구하는 문제.

A 코드

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int A = sc.nextInt();
        int B = sc.nextInt();
        int C = sc.nextInt();

        int loopA = C / A;
        int loopB = C / B;

        int max = 0;
        for (int i = 0; i <= loopA; i++) {
            for (int j = 0; j <= loopB; j++) {
                if (A * i + B * j <= C)
                    max = Math.max(max, A * i + B * j);
            }
        }

        System.out.println(max);
    }
}

A 코드 핵심

  • A와 B를 반복문으로 조합하여 C 이하의 최댓값을 찾음.
  • 두 중첩 반복문을 사용하여 가능한 모든 경우를 탐색.

B 코드

import java.util.Scanner;

public class Main {
    public static int a, b, c;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        a = sc.nextInt();
        b = sc.nextInt();
        c = sc.nextInt();

        int ans = 0;

        for(int i = 0; i * a <= c; i++) {
            int cnt = a * i;
            int numB = (c - cnt) / b;
            cnt += numB * b;
            ans = Math.max(ans, cnt);
        }

        System.out.print(ans);
    }
}

B 코드 핵심

  • A를 i번 사용한 후, 남은 값에서 B를 최대한 많이 더함.
  • 중첩 반복문을 피하고, 더 효율적인 방식으로 탐색.

0개의 댓글