umilove98의 블로그

백준 1059 Java 본문

algorithm/백준

백준 1059 Java

umilove98 2021. 7. 22. 14:20
반응형

 

먼저 입력된 값들 중 n 과 가장 가까운 작은 값 과 가장 가까운 큰 값을 start, end에 저장한다.

이 때, 입력된 값 중 n과 같은 값이 있을 경우에 조건을 만족하는 구간이 생기지 않으므로 0을 출력하고 프로그램을 종료한다.

start 값보다 1큰 값 부터 end값보다 1 작은 값 사이에서 n을 사이에 포함하는 두 수들[i ,j]을 모두 찾으면 되므로 이중 for문을 사용하여 start+1값부터 n까지 를 i로 고정시켜놓고 n 값부터 end -1 값까지를 j에 넣어 조합을 모두 찾으며 카운트한다.

이대로 구현하면 [n,n]값도 카운트에 포함되므로 if문을 이용해 제외시켜준다.

카운트한 값 출력 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int l = Integer.parseInt(bf.readLine());
		ArrayList<Integer> inputarr = new ArrayList<Integer>();
		String s = bf.readLine();
		StringTokenizer st = new StringTokenizer(s); 
		for(int i = 0; i < l; i++) {
			inputarr.add(Integer.parseInt(st.nextToken()));
		}
		int n = Integer.parseInt(bf.readLine());
		int start = 0, end = 1001; // 집합 s에 포함된 모든 정수는 1보다 크거나 같고, 1000보다 작거나 같다.
		
		for(int i : inputarr) { //n과 가장 가까운 두 수 를 start, end에 저장 
			if(i < n) {
				if( i > start) {
					start = i;
				}
			}else if(i > n) {
				if(i < end) {
					end = i;
				}
			}else {	// 리스트의 원소 중 n 과 같은 값이 있으면 출력은 0이 된다
				System.out.println(0);
				return;
			}
		}
		
		int cnt = 0;
		

		for(int i = start + 1; i <= n; i++) {
			for(int j = n; j <= end - 1; j++) {
				if(i != j) {	//이대로 계산하면 [n,n]도 카운트에 포함되므로 제외하기 위해 
					cnt++;
				}
			}
		}

		System.out.println(cnt);
	}

}
반응형

'algorithm > 백준' 카테고리의 다른 글

백준 1158 Java  (0) 2021.07.23
백준 1094 Java  (0) 2021.07.23
백준 1037 Java  (0) 2021.07.22
백준 1018 Java  (0) 2021.07.22
백준 1297 Java  (0) 2021.07.20