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

 

1049번: 기타줄

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

www.acmicpc.net

 

문제 요약 : 기타줄 N줄을 사기 위한 최소비용

입력 출력

1 ≤ N(기타줄) ≤ 100

1 ≤ M(브랜드) ≤ 50

0 ≤ M줄의 6줄 1줄 비용 ≤ 1000 

기타줄 N줄을 사기 위한 최소 비용

 

JAVA

채점 번호 아이디 문제 번호 결과 메모리 시간 언어 코드 길이
16511324 cbkpar 1049 맞았습니다!! 13092KB 72ms Java 938B
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
	
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int n,m,i,one,six,s;
		StringTokenizer st = new StringTokenizer(br.readLine());
		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());
		
		one = 1000; //초기에 최댓값으로 지정
		six = 1000; //초기에 최댓값으로 지정
		for(i=0;i<m;i++) {
			st = new StringTokenizer(br.readLine());
			six = Math.min(six, Integer.parseInt(st.nextToken()));
			one = Math.min(one, Integer.parseInt(st.nextToken()));
		}
		s=(six>=one*6)?(n/6)*6*one:(n/6)*six; // 6개 단위로 묶음(6개)와 1개 비교
		n%=6; //묶음과 1개로 사고 남은 나머지
		s+=(six>=one*n)?one*n:six; // 묶음(6개) 와 1개로 샀을때 가격 비교
		bw.write(s+"\n");
		br.close();
		bw.close();
	}
}

+ Recent posts