[백준] 11399 - ATM

2020. 8. 26. 17:10알고리즘/Baekjoon

728x90

백준링크: 바로가기

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

#그리디 알고리즘 #정렬

일단 접근방법은 맞았고 IntelliJ 결과값도 잘 나왔는데 백준 런타임 에러 가 4번 떠서 당황한 문제. 원인은 문제해결과 무관한 코드 입력 때문이었다(a.k.a 쓸모없는 코드입력이나 접근방법은 배제하라 아님 에러를 주겠어)

요즘 유튜브로 DP(다이나믹 프로그래밍)을 공부해서 최소값과 현재 배열 index 전까지의 총합을 구하는 부분이 타일링이나 피보나치와 유사하다고 생각해 dp[] 배열을 만들어서 total을 구했다.  = (런타임 에러 구덩이로 빠진 이유)

A의 총 인출에 걸린시간(waiting)을 구하는 간단한 공식 waiting[i] = waitng[i-1] + waiting[i]; 만 작성해줘도 풀리는 문제다.
(A의 총 인출시간 = 앞선 사람들 인출시간 + 본인 인출시간)이 나오기 때문에 모든 사람의 인출시간은 반복문으로 배열의 합만 구하면 끝이다. 여하튼 런타임 에러 구덩이가 인상깊어 후기를 남기게 됐다.

solved.ac 기준 실버3 레벨 문제였는데 헤매지 않고 한 방에 해결까지 가서 나쁘지 않았다.

 

solved.ac

우리 모두가 만들어가는알고리즘 문제해결 학습의 이정표 solved.ac는 Baekjoon Online Judge 문제들에 태그와 난이도를 붙이는 커뮤니티 프로젝트입니다. 현재 10,119개 문제에 난이도 정보를 제공하고 �

solved.ac

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

public class ATM_11399 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //사람 수
        int people = Integer.parseInt(br.readLine());
        //인출 시간
        String[] input1 = br.readLine().split(" ");
        //int 배열 선언
        int[] waiting = new int[people];
        for (int i = 0; i < people; i++) {
            waiting[i] = Integer.parseInt(input1[i]);
        }
        //waiting 배열 ASC 정렬
        Arrays.sort(waiting);
        //인출 시간 총합
        int total = 0;
        //각 사람의 인출 시간
        for(int i = 1; i < people; i++) {
            waiting[i] = waiting[i-1] + waiting[i];
            total += waiting[i];
        }


        System.out.println(total+waiting[0]);

    }
}

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

[백준] 11654 - 아스키 코드 변환  (0) 2020.09.02
[백준] 1065 - 한수  (0) 2020.09.01
[백준] 1003 - 피보나치 함수(재도전)  (0) 2020.08.26
[백준] 1758- 알바생 강호  (0) 2020.08.26
[백준] 11726 - 2xn 타일링  (0) 2020.08.24