본문 바로가기

백준

[백준/JAVA] 25635번: 자유 이용권

문제 보러가기

 

25635번: 자유 이용권

자유 이용권은 놀이공원의 모든 놀이기구를 횟수의 제한 없이 마음껏 이용할 수 있는 이용권이다. 준원이는 ANA 놀이공원의 자유 이용권을 구매했고, 최대한 많이 놀이기구를 이용할 생각이다.

www.acmicpc.net

[문제 풀이]

만약 같은 놀이기구를 이용할 수 있다면 모든 횟수를 더해주면 그만이지만, 같은 놀이기구를 매번 이용할수 없다는 제한사항이 있다. 우리가 찾아야 할 것은 가장 큰 사용 횟수를 가진 놀이기구였다.왜? 가장 큰 횟수의 놀이기구를 모두 탈 수 있을까? 아닐까? 라는 고민을 시작한 이유는 같은 놀이기구를 매번 탈 수 는없지만, 사실 2개의 놀이기구만 있어도 돌아가면서 탈 수 있다. 이것을 가장 큰 횟수를 가진 놀이기구를 다른 놀이기구와 번갈아 타면서 탄다면? 이라는 생각이 문득 들었다.

그렇기 때문에 가장 큰 횟수를 가진 놀이기구와 그렇지 않은 놀이기구의 횟수의 합을 비교하면 값은 매우 간단하다.

 

[코드]

import java.io.*;
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));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(br.readLine());
        long[] count = new long[N];
        long sum = 0;
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) count[i] = Long.parseLong(st.nextToken());
        Arrays.sort(count);
        for (int i = 0; i < N - 1; i++) sum += count[i];
        if (sum > count[N - 1]) bw.write(sum + count[N - 1] + "");
        else if (sum < count[N - 1]) bw.write(sum * 2 + 1 + "");
        else bw.write(sum * 2 + "");
        bw.close();
    }
}