-
[백준/BOJ] 11399번 : ATM (JAVA / 자바)백준 2022. 2. 25. 23:28
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/11399
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
사람수 N명이 입력된다.
N명마다의 시간이 입력된다.
5명이고, p1 p2 p3 p4 p5 시간일떄 총시간을 구하는 것이다. 문제에 친절히 적혀있으니 자세한 식은 생략한다.
여기서 중요한건 어떻게 최소 시간 값을 구할 것인가이다.
최소 시간이 되기 위해서는 제일 작은수부터 더해 나가면 되는 것이다. 5 6 1 2 8이 있다. 식대로 계산하면 64가 된다.
오름차순으로 정렬해보자. 1 2 5 6 8이다. 48이 나온다. 내림차순으로 정렬해보자. 8 6 5 2 1이다. 84가 나온다. 이걸로 알 수 있듯이 작은수부터 즉 오름차순으로 정렬해서 작은 수부터 연산하면 최소 시간 값이 나온다는 것이다.
코드로 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); //처음 입력값을 저장할 배열 int[] arr = new int[N]; //사람들이 돈을 뽑기위해 몇분 걸리는지 저장하기 위한 배열 int[] result = new int[N]; StringTokenizer st = new StringTokenizer(br.readLine()); for(int i = 0; i < N; i++) { arr[i] = Integer.parseInt(st.nextToken()); } //정렬 Arrays.sort(arr); //첫번째 사람은 자기 시간이 곧 돈뽑는데 걸리는 시간이니 그대로 저장 result[0] = arr[0]; //두번째부터 걸리는 시간을 연산해서 저장 for(int i = 1; i < N; i++) { result[i] = result[i - 1] + arr[i]; } int sum = 0; //모든 시간을 더한다. for(int i = 0; i < N; i++) { sum += result[i]; } System.out.println(sum); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1436번 : 영화감독 숌 (JAVA / 자바) (0) 2022.02.26 [백준/BOJ] 9095번 : 1, 2, 3 더하기 (JAVA / 자바) (0) 2022.02.26 [백준/BOJ] 15903번 : 카드 합체 놀이 (JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 2751번 : 수 정렬하기 2 (JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 15552번 : 빠른 A+B (JAVA / 자바) (0) 2022.02.25