728x90
https://www.acmicpc.net/problem/20438
실버2 레벨에 맞지 않게..
아주 간단하게 구간을 확인하여 풀 수 있는 문제였다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public 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));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int Q = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[] arr = new int[N + 3];
// 졸고 있는 학생 - 2
// 출첵한 학생 - 1
// 아무것도 안한 학생 - 0
st = new StringTokenizer(br.readLine());
for (int i = 0; i < K; i++) {
int idx = Integer.parseInt(st.nextToken());
arr[idx] = 2;
}
st = new StringTokenizer(br.readLine());
for (int i = 0; i < Q; i++) {
int idx = Integer.parseInt(st.nextToken());
int n = 1;
if (arr[idx] != 2) {
for (int idx2 = idx; idx2 < N + 3; idx2 += idx) {
if (arr[idx2] != 2)
arr[idx2] = 1;
n++;
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
int count = 0;
for (int j = start; j <= end; j++) {
if (arr[j] == 0 || arr[j] == 2)
count++;
}
sb.append(count).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
'Java' 카테고리의 다른 글
[백준 2583] 영역 구하기 (JAVA) (0) | 2023.03.23 |
---|---|
[백준 13305] 주유소 (JAVA) (0) | 2023.03.22 |
[백준 14889] 스타트와 링크 (JAVA) (0) | 2023.03.20 |
[백준 1406] 에디터 (JAVA) (0) | 2023.03.19 |
[백준 1629] 곱셈 (JAVA) (0) | 2023.03.12 |