전공공부
[BOJ_20438] 출석 체크 본문
설명
요즘 제대로 된 문제를 많이 풀지를 않아서 머리가 돌지 않았습니다. 풀이라고 할 것도 없는 것이 배열을 진행하면서 단순히 배수 케이스 체크 그리고, 자는 학생의 케이스 배수 케이스 체크하여서 단순히 수집 못하는 경우만 빼면 되는 쉬운 문제 였습니다.
누적합으로 풀이하는 문제가 많았지만 마땅히 떠오르지 않아 단순 구현 방식으로 풀었습니다.
코드
package BOJ.prefix_sum;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class BOJ_20438 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer tk = new StringTokenizer(in.readLine()," ");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(tk.nextToken());
int K = Integer.parseInt(tk.nextToken());
int Q = Integer.parseInt(tk.nextToken());
int M = Integer.parseInt(tk.nextToken());
int[] arr = new int[N + 3];
tk = new StringTokenizer(in.readLine()," ");
for (int i = 0; i < K; i++){
arr[Integer.parseInt(tk.nextToken())] = 2; //sleeper
}
tk = new StringTokenizer(in.readLine()," ");
for (int i = 0; i < Q; i++){
int go = (Integer.parseInt(tk.nextToken()));
if(arr[go] != 2) {
arr[go] = 1; //sender
for (int j = go; j < N + 3; j+= go){
if(arr[j] != 2){
arr[j] = 1;
}
}
}
}
StringBuilder sb = new StringBuilder();
while (M-- > 0){
tk = new StringTokenizer(in.readLine()," ");
int S = Integer.parseInt(tk.nextToken());
int E = Integer.parseInt(tk.nextToken());
int cnt = 0;
for (int i = S; i <= E; i++){
if(arr[i] != 1){
cnt++;
}
}
sb.append(cnt +"\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
}
}
'Study > Problem Solving' 카테고리의 다른 글
[BOJ_17123] 배열 놀이 (0) | 2024.05.06 |
---|---|
[BOJ_21318] 피아노 체조 (0) | 2024.04.29 |
[BOJ_11000] 강의실 배정 (0) | 2024.04.07 |
[BOJ_20365] 블로그2 (0) | 2024.04.04 |
[BOJ_13305] 주유소 (0) | 2024.04.01 |