알고리즘 문제풀이/백준

#1049 : 기타줄

모항 2023. 1. 18. 12:01

풀이방법

사용된 것:

그리디(Greedy)

 

 

 

 

 

2023.01.18

패키지 가격 중의 최솟값 (setMin), 낱개 가격 중의 최솟값 (oneMin) 을 각각 구한다.

M을 6으로 나눈 나머지 mod를 구한다.

 

다음의 3가지 경우에 따라 문제를 해결한다.

  1. setMin > (6 * oneMin)인 경우: 무조건 낱개로만 구매
  2. setMin <= (mod * oneMin)인 경우: 무조건 패키지로만 구매
  3. setMin <= (6 * oneMin) && setMin > (mod * oneMin)인 경우: M/6개만큼 패키지로, mod개만큼 낱개로 구매

 

코드

Java(2023.01.18)

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

public class Main {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		//N과 M의 값 읽어오기
		StringTokenizer st = new StringTokenizer (br.readLine());
		
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
		//패키지별 & 낱개별 최솟값을 저장할 변수 선언 및 초기화
		int setMin = Integer.MAX_VALUE;
		int oneMin = Integer.MAX_VALUE;
		
		for(int i=0; i<m; i++) {
			//입력값 읽기
			st = new StringTokenizer(br.readLine());
			//최솟값 판단
			setMin = Math.min(Integer.parseInt(st.nextToken()), setMin);
			oneMin = Math.min(Integer.parseInt(st.nextToken()), oneMin);
		}
		
		
		//정답 계산 및 출력
		int mod = n%6;
		int answer = -1;
		
		if(setMin> (6*oneMin)) {
			answer = oneMin * n;
		}
		else if(setMin <= (mod*oneMin)) {
			answer = setMin * ((n/6)+1);
		}
		else {
			answer = (setMin * (n/6)) + (oneMin * mod);
		}
		
		System.out.print(answer);

	}

}

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

#2884 : 알람 시계  (0) 2023.03.08
#5585 : 거스름돈  (0) 2023.01.19
#15649 : N과 M (1)  (0) 2023.01.18
#2501 : 약수 구하기  (0) 2023.01.16
#1918 : 후위 표기식  (0) 2023.01.11