티스토리 뷰
문제
20438번: 출석체크
1번째 줄에 학생의 수 N, 졸고 있는 학생의 수 K, 지환이가 출석 코드를 보낼 학생의 수 Q, 주어질 구간의 수 M이 주어진다. (1 ≤ K, Q ≤ N ≤ 5,000, 1 ≤ M ≤ 50,000) 2번째 줄과 3번째 줄에 각각 K명
www.acmicpc.net
풀이
1. 조는 친구들을 우선 체크한 후, 출석 번호를 받은 친구들의 배수마다 출석했다고 체크를 하는데 조는 친구들은 무시하고 넘어가면 됩니다.
2. 이 때 구간질의마다 학생 수를 세면 시간초과가 나기 때문에 미리 누적합 배열을 저장해놓고, [s, e] 구간의 합에 대해psum[e] - psum[s - 1]을 출력하면 해결할 수 있습니다.
코드
#include <bits/stdc++.h>
using namespace std;
int n, k, q, m, x, s, e, add;
bool sleep[5005], chk[5005];
vector<int> psum;
int main() {
cin.tie(NULL); cout.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n >> k >> q >> m;
psum.resize(n + 3, 0);
while (k--) {
cin >> x;
sleep[x] = 1;
}
while (q--) {
cin >> x;
if (sleep[x]) continue;
add = x;
while (x <= n + 2) {
if (sleep[x]) {
x += add;
continue;
}
chk[x] = 1, x += add;
}
}
for (int i = 3; i <= n + 2; i++) psum[i] = psum[i - 1] + (chk[i] == 0);
for (int i = 0; i < m; i++) {
cin >> s >> e;
cout << psum[e] - psum[s - 1] << '\n';
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준 7045] Tree Cutting (0) | 2021.03.17 |
---|---|
[백준 5867] Scrambled Letters (0) | 2021.02.07 |
[백준 20437] 문자열 게임2 (0) | 2021.01.08 |
[백준 20435] ZOAC3 (0) | 2021.01.08 |
[백준 3109] 빵집 (0) | 2021.01.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 위클리 챌린지
- 백준
- 투포인터
- 동적계획법
- 2022 KAKAO BLIND RECRUITMENT
- 파싱
- 프로그래머스 위클리 9주차
- 카카오 2차코딩테스트
- 2022 카카오블라인드
- 2022 카카오 블라인드 코딩테스트
- 카카오 2021
- 트리
- 프로그래머스
- 이분탐색
- 2020 KAKAO BLIND RECRUITMENT
- 구현
- 누적합
- 카카오 표 편집
- 프로그래머스 월간코드챌린지
- 시뮬레이션
- 2021 카카오 블라인드
- BFS
- 카카오 2020 인턴십
- Kakaoblind
- 2021 KAKAO BLIND
- 표 편집
- 유니온파인드
- 게임이론
- 카카오 인턴십
- DP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함