본문 바로가기
알고리즘

[백준/파이썬(Python),자바(JAVA)] 기타줄 1049 Silver 4

by Rudy 2023. 2. 8.

💌문제


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

 

1049번: 기타줄

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

www.acmicpc.net

💌풀이


일단 먼저 6개가 들어있는 패키지의 가격대로 정렬한 리스트와 낱개로 살 때의 가격대로 정렬한 리스트를 만든다.

루프를 돌면서 만약에 n이 6보다 같거나 크면 패키지 가격으로 살 수 있기 때문에 n//6한 값만큼 패키지를 살 수 있으므로, 그렇게 연산해서 answer에 패키지 가격을 더해본다.

그리고, 낱개로 6개를 샀을 때의 가격도 계산해본다.

그 다음에 패키지가격으로 샀을 때, 낱개로 6개 샀을 때 중에서 더 작은 값을 저장한다.

그 다음에는 6으로 나눈 나머지, 즉 낱개로 사야하는 기타줄이 있다.

그래서 가격대로 정렬한 리스트의 가장 첫번째, 즉, 가장 싼 가격*남은 기타줄을 answer에 더해주면 된다.

💌파이썬 코드


n,m=map(int,input().split())
guitarPackage=[]
guitarOne=[]
for _ in range(m):
    a,b=map(int,input().split())
    guitarPackage.append(a) #6개가 들어있는 패키지의 가격, 낱개로 살 때의 가격
    guitarOne.append(b)

guitarPackage.sort()
guitarOne.sort()

answer=0

if n>=6:
    packageNum=(n//6)
    mod=n%6
    answer=min(guitarPackage[0]*packageNum,guitarOne[0]*6*packageNum)
    answer+=min(guitarOne[0]*mod,guitarPackage[0])
else:
    answer=min(guitarOne[0]*n,guitarPackage[0])

print(answer)

💌자바 코드


package org.example;

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

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[] guitarOne=new int[m];
        int[] guitarPackage=new int[m];
        int answer=0;
        for (int i=0;i<m;i++){
            StringTokenizer s=new StringTokenizer(br.readLine());
            guitarPackage[i]=Integer.parseInt(s.nextToken());
            guitarOne[i]=Integer.parseInt(s.nextToken());
        }

        Arrays.sort(guitarPackage);
        Arrays.sort(guitarOne);

        if(n>=6){
            int mod=n%6;
            int div=n/6;
            answer=Math.min(div*guitarPackage[0],div*6*guitarOne[0]);
            answer+=Math.min(guitarOne[0]*mod,guitarPackage[0]);
        }else{
            answer=Math.min(guitarOne[0]*n,guitarPackage[0]);
        }
        System.out.println(answer);
    }
}

댓글