티스토리 뷰

1. 문제

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

 

1049번: 기타줄

첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주

www.acmicpc.net

 

2. 설명

묶음으로 구매할 때와 낱개로 구매할 때의 경우를 따로 집합에 삽입해 오름차순으로 정렬했다.

그리고 묶음으로 구매할 때 vs 낱개로 6개를 구매할 때를 비교해서 작은 값을 구했다. (minBundle)

정답의 경우 예를 들어, 14개를 구매할 경우, 3묶음(18)으로 구매할 경우와 2묶음(12) + 2개로 구매할 경우를 비교해 최솟값을 출력하도록 했다.

 

3. 코드

import java.util.Arrays;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

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 M = Integer.parseInt(st.nextToken());
		int[] bundle = new int[M];
		int[] single = new int[M];
		for(int i=0; i<M; i++) {
			st = new StringTokenizer(br.readLine());
			bundle[i] = Integer.parseInt(st.nextToken());
			single[i] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(bundle);
		Arrays.sort(single);
		
		int minBundle = bundle[0];
		for(int s : single) {
			if(minBundle > (s*6))
				minBundle = s*6;
		}
		
		int pack = (N/6 + 1) * minBundle;
		int sing = (N/6) * minBundle + (N%6) * single[0];
		System.out.println(pack<sing ? pack : sing);
	}
}

'알고리즘 풀이 > 백준' 카테고리의 다른 글

백준 1152 단어의 개수 JAVA  (0) 2020.08.02
백준 1157 단어 공부 JAVA  (0) 2020.07.31
백준 2217 로프 JAVA  (0) 2020.07.29
백준 9461 파도반 수열 JAVA (DP)  (0) 2020.07.20
백준 11727 2xn 타일링 2 JAVA (DP)  (0) 2020.07.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday