개발후라이
개발후라이
개발후라이
  • 분류 전체보기 (285)
    • Web Front End (74)
      • Javascript & Typescript (26)
      • React (11)
      • Vue (4)
      • Nodejs (1)
      • HTML (6)
      • CSS (7)
      • HTTP (6)
      • 책 - Review (8)
    • TIL (0)
    • Problem Solved (135)
      • 알고리즘 (4)
      • BOJ (67)
      • Programmers (8)
      • HackerRank (33)
      • LeetCode (23)
    • 회고 (4)
      • 오늘의 회고 (16)
      • 주간 회고 (15)
      • 월간 회고 (7)
      • WakaTime (9)
    • Git (3)
    • 기타 (15)
      • 취업 (5)
      • 자격증 (1)

블로그 메뉴

  • GitHub
  • LinkedIn
  • 홈

인기 글

태그

  • 노마드북클럽
  • JavaScript
  • 릿코드
  • TypeScript
  • 노개북
  • 프론트엔드
  • 자바스크립트
  • 회고
  • 오늘의회고
  • 개발자

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
개발후라이

개발후라이

Problem Solved/BOJ

[BOJ][Java] 11399번 - ATM

2020. 1. 19. 12:53
반응형

문제

백준 11399번 문제: ATM

문제 설명

기다리는 시간의 합을 최소화하는 문제

기다리는 시간의 함을 최소화하기 위해서는 작은 수부터 앞에 와야 한다.
시간 제한이 1초이기 때문에 Arrays.sort()를 통해서 정렬 후 값을 더해 나가면 된다.
0번째 수부터 n번째 수의 합의 합을 구하는 것이 목적인데, for문을 한번만 돌고 싶다.
내가 찾은 방법은 두 가지이다.

  1. 인출하는 사람마다 반복해서 더해지는 개수를 세서 더하는 방법
  • 5명이 차례대로 인출을 한다면 1번 사람은 5번 더해진다.

    1
    1+2
    1+2+3
    1+2+3+4
    1+2+3+4+5

    위와 같이 첫 번째 사람부터 반복 횟수가 1씩 떨어지기 때문이다.
    그래서 이를 계산해서 곱해 주면 된다.

    for (int time = 0; time < withdrawTime.length; time++) {
    result += withdrawTime[time] * (withdrawTime.length-time);
    }
  1. 임시 저장 변수을 만들어 저장한다.

    1
    1+2
    1+2+3
    1+2+3+4
    1+2+3+4+5
  • 문제에 주어진 더하는 방식을 그대로 더해지는 것이다.
  • 위의 라인대로 temp에 담기고, temp는 sum에 더해져 최종 sum이 나오게 된다.
    for (int i = 0; i < n; i++){
    temp += line[i];
    sum += temp;
    }

성공 코드

import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.IntStream;

public class BOJ11399 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int withdrawTime[] = new int[n];

        IntStream.range(0, n).forEach(x -> {
            withdrawTime[x] = sc.nextInt();
        });

        sc.close();
        System.out.print(wholeTime(withdrawTime));
    }

    public static int wholeTime(int[] withdrawTime) {
        int result = 0;
        Arrays.sort(withdrawTime);

        for (int time = 0; time < withdrawTime.length; time++) {
            result += withdrawTime[time] * (withdrawTime.length-time);
        }

        return result;
    }

}
반응형
저작자표시 (새창열림)
    'Problem Solved/BOJ' 카테고리의 다른 글
    • [BOJ][Java] 5086번 - 배수와 약수
    • [BOJ][Java] 1541번 - 잃어버린 괄호
    • [BOJ][Java] 2579번 - 계단 오르기
    • [BOJ][Java] 1931번 - 회의실배정
    개발후라이
    개발후라이
    어제보다 오늘 발전하기 위한 공간 https://github.com/choisohyun

    티스토리툴바