[Silver IV][JAVA] 1059번:좋은 구간

호수·2023년 9월 11일
0

JAVA 알고리즘

목록 보기
25/67
post-thumbnail
post-custom-banner

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

1059번: 좋은 구간

유형
수학, 배열

해설

좋은 구간이란 4 8 13 24 30이 주어지고 n이 10일 때 8과 13 사이에 10이 있으므로 10을 포함하는 모든 구간을 말한다. 이때 8과 13은 제외하므로 [9,10], [9,11], [9,12], [10,11], [10,12]가 된다. 이 경우 10보다 작은 9를 포함하고 있을 때 10을 포함하여 10보다 큰 경우를 모두 포함하고 있고, 10을 첫 번째 인수로 받은 경우 10보다 크고 13보다 작은 경우의 2가지만 포함하고 있는 것을 확인할 수 있다.
위의 경우를 통해 8과 13을 제외한 9 10 11 12가 있고 n이 10이면 (10보다 작은 수의 개수) * (10을 포함한 10보다 큰 수의 개수) + (10보다 큰 수의 개수) 가 되는 것을 볼 수 있다. 이걸 공식으로 만들면 문제를 해결할 수 있다.

풀이

package baekjoon_java.SilverIV;

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

public class 좋은구간 {

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(in.readLine());
        int N  =stoi(st.nextToken());
        int arr[] = new int[N];
        st = new StringTokenizer(in.readLine());
        for (int i = 0; i < arr.length; i++) {
            arr[i]= stoi(st.nextToken());
        }
        st = new StringTokenizer(in.readLine());
        int M = stoi(st.nextToken());
        Arrays.sort(arr);
        int left=0, right=987654321;
        boolean find=false;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]>M) {
                right=Math.min(right, arr[i]);
            }else if(arr[i]<M){
                left=Math.max(left, arr[i]);
            }else {
                find=true;
                break;
            }
        }
        int L = (M-left-1);
        int R = (right-M-1);
        int answer = L + R +(L*R);
        if(find)
            System.out.println(0);
        else
            System.out.println(answer);
    }

    static int stoi(String s) {
        return Integer.valueOf(s);
    }
}
profile
Back-End개발자 성장과정 블로그🚀
post-custom-banner

0개의 댓글