https://www.acmicpc.net/problem/1059
구간을 찾는 문제이다.
정수 집합 S가 있고, 주어진 숫자가 포함된 구간을 좋은 구간이라고 한다.
A<=B를 만족하며 두번째 줄에 입력한 숫자들은 구간에 포함되지 않는다 한다.
정수형 배열 안에서 가장 가까운 수를 찾는 로직이다.
numbers배열안을 선회하며
만약 numbers[i]가 n보다 크고 현재 end값보다 작다면
n과 더 가까운 수가 되니 end에 numbers[i]를 저장한다.
반대로 numbers[i]가 n보다 작으며 현재 start값보다 크면
n과 더 가까운 수가 되니 start에 numbers[i]를 저장한다.
// numbers[]안에서 제일 가까운 수 찾기
int temp = 0;
int start = 0;
int end = Integer.MAX_VALUE;
for (int i = 0; i < numbers.length; i++) {
if(numbers[i] > n) {
if(numbers[i] < end)
end = numbers[i];
}else if(numbers[i] < n) {
if(start < numbers[i])
start = numbers[i];
}
else if(numbers[i] == n){ // 만약 갖고 있다면 break;
System.out.println("0");
System.exit(0);
}
}
아래는 전체 코드이다.
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 NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int l = Integer.parseInt(br.readLine());
int numbers[] = new int[l];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < numbers.length; i++) {
numbers[i] = Integer.parseInt(st.nextToken());
}
int n = Integer.parseInt(br.readLine());
Arrays.sort(numbers);
// numbers[]안에서 제일 가까운 수 찾기
int temp = 0;
int start = 0;
int end = Integer.MAX_VALUE;
for (int i = 0; i < numbers.length; i++) {
if(numbers[i] > n) {
if(numbers[i] < end)
end = numbers[i];
}else if(numbers[i] < n) {
if(start < numbers[i])
start = numbers[i];
}
else if(numbers[i] == n){ // 만약 갖고 있다면 break;
System.out.println("0");
System.exit(0);
}
}
int cnt = 0;
for (int i = start + 1; i <= n ; i++) {
for (int j = n; j <= end-1; j++) {
if(i != j) cnt++;
}
}
System.out.println(cnt);
} // main
}
'BOJ, Programmers' 카테고리의 다른 글
[JAVA] 백준 1041 (주사위) (0) | 2024.04.05 |
---|---|
[Java] 백준 1500 (최대곱) (0) | 2024.04.03 |
[Java] 백준 1010번 (다리놓기) (0) | 2024.03.30 |
[Java] 백준 1012번 (유기농 배추) (0) | 2024.03.30 |
Test (0) | 2024.03.30 |