코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

알고리즘/백준

5545번 : 최고의 피자

2022. 7. 30. 13:51

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

 

5545번: 최고의 피자

상근이는 근처 피자 가게에서 매일 저녁으로 피자를 배달해 먹는다. 주머니 사정이 얇아진 상근이는 이번 달부터는 "최고의 피자"를 구매하려고 한다. 최고의 피자란, 피자 가게에서 주문할 수

www.acmicpc.net

 

 

문제

 

 

코드

import java.io.*;
import java.util.*;

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));
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(br.readLine());

        Integer[] cal = new Integer[n];
        long sum[] = new long[n];
        for(int i=0;i<n;i++) cal[i]=Integer.parseInt(br.readLine());
        Arrays.sort(cal, Collections.reverseOrder());
        for(int i=0;i<n;i++) {
            if(i==0) sum[i]=cal[i]+c;
            else sum[i]+=sum[i-1]+cal[i];
        }

        long max=c/a; //토핑 안 올렸을 때, 1원당 열량
        int price=a;
        for(int i=0;i<n;i++) {
            price+=b;
            if(sum[i]/price>max) {
                max=sum[i]/price;
            }
        }

        bw.write(max+""); bw.flush();
    }
}

 

 

해결방법

입력받은 토핑을 내림차순 정렬 해준 뒤 토핑을 한 개씩 추가하면 토핑 개수 당 1원당 열량의 최댓값을 구할 수 있다. 고로,

입력받은 토핑을 내림차순 정렬 해준 뒤 토핑을 한 개씩 추가할 때마다 1원당 열량을 계산하여 가장 큰 값을 출력하였다.

1원당 열량을 계산할 땐, 시간초과가 날 것 같아서 미리 누적합을 배열에 저장해두었다.

 

도우 가격: 12
토핑 가격: 2

도우 열량: 200
토핑1 열량: 50
토핑2 열량: 300
토핑3 열량: 100
토핑: 300, 100, 50

k=0일 때, 가격: 12 , 열량: 200, 1원당 열량: 35
k=1일 때, 가격: 12 + 2 =14, 열량: 500, 1원당 열량: 35
k=2일 때, 가격: 12 + 4 =16, 열량: 600, 1원당 열량: 37
k=3일 때, 가격: 18, 열량: 650, 1원당 열량: 36

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

2667번 : 단지번호붙이기  (0) 2022.08.01
2178번 : 미로 탐색  (0) 2022.07.31
1758번 : 알바생 강호  (0) 2022.07.29
11279번 : 최대 힙  (0) 2022.07.28
18870번 : 좌표 압축  (0) 2022.07.27
    '알고리즘/백준' 카테고리의 다른 글
    • 2667번 : 단지번호붙이기
    • 2178번 : 미로 탐색
    • 1758번 : 알바생 강호
    • 11279번 : 최대 힙
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바