티스토리 뷰
문제
3020번: 개똥벌레
개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이
www.acmicpc.net
풀이
1. 구해야 하는 것은 벌레가 [1, h] 높이를 지나갈 때, ① 부서지는 석순의 개수의 최소 값과 ② 그러한 개수를 만족하는 높이의 개수를 구해야 합니다.
2. ②번부터 생각해본다면, 높이를 지날 때마다 부서지는 석순의 개수를 인덱스로 갖고 그러한 높이들의 개수를 값으로 갖는 맵(stl)을 사용하면 첫 번째 원소 값 기준으로 오름차순 정렬된 채로 유지되기에 결과적으로 답은 맵의 첫 번째 원소의 인덱스(부서진 석순의 최소 값)와 그 값(높이들의 개수)을 출력하면 해결할 수 있습니다.
3. 부서지는 석순의 개수는 벌레가 지나는 구간을 i라 할 때 ( i : [1, h]) 아래쪽에서 부서지는 석순들의 높이는 i이상이고, 위쪽에서 부서지는 석순들의 높이는 h - i + 1이상인 것들의 개수입니다. 또한 벌레가 지나갈 때 석순들이 서있는 순서와 관계없이 높이에 따라서 부서지므로 위, 아래 석순들을 오름차순으로 정렬한 후 lower_bound를 사용하여 위, 아래 석순의 전체개수에서 그 인덱스를 빼준다면 부서지는 석순의 개수를 구할 수 있습니다.
코드
#include <bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
int n, h, ipt, usz, dsz, cnt1, cnt2;
vector<int> u, d;
map<int, int> mp;
int main() {
cin.tie(NULL); cout.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n >> h;
for (int i = 0; i < n; i++) {
cin >> ipt;
if (i % 2) u.emplace_back(ipt);
else d.emplace_back(ipt);
}
sort(all(u)), sort(all(d));
usz= u.size(), dsz = d.size();
for (int i = 1; i <= h; i++) {
cnt1= usz - (lower_bound(all(u), h - i + 1) - u.begin());
cnt2 = dsz - (lower_bound(all(d), i) - d.begin());
mp[cnt1 + cnt2]++;
}
cout << (*mp.begin()).first << " " << (*mp.begin()).second;
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준 3109] 빵집 (0) | 2021.01.08 |
---|---|
[백준 16973] 직사각형 탈출 (0) | 2021.01.04 |
[백준 10775] 공항 (0) | 2020.12.19 |
[백준 14939] 불끄기 (0) | 2020.12.19 |
[백준 2342] Dance Dance Revolution (0) | 2020.12.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 게임이론
- 프로그래머스 위클리 9주차
- 누적합
- BFS
- Kakaoblind
- 유니온파인드
- 이분탐색
- DP
- 2022 카카오블라인드
- 프로그래머스 월간코드챌린지
- 위클리 챌린지
- 투포인터
- 2022 KAKAO BLIND RECRUITMENT
- 2021 카카오 블라인드
- 2020 KAKAO BLIND RECRUITMENT
- 카카오 인턴십
- 트리
- 파싱
- 2021 KAKAO BLIND
- 백준
- 카카오 표 편집
- 시뮬레이션
- 프로그래머스
- 표 편집
- 2022 카카오 블라인드 코딩테스트
- 카카오 2차코딩테스트
- 구현
- 동적계획법
- 카카오 2020 인턴십
- 카카오 2021
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함