BOJ 23971번
백준 저지의 BFS 문제 풀이 과정을 공유드린다.
문제 출처
1. 문제설명
- 거리두기 수칙(X칸 만큼 떨어져야 함.)을 준수하면서 최대 몇명이 앉을 수 있는지?
2. 알고리즘 설계
- 정석적인 접근법이 뭔지 모르겠다.
- 본인은 규칙을 유추하였다. 값을 넣어보면서…..
3. 로직
-
첫 번째 접근법(규칙 찾은 거)
int t1 = (H - 1) / (N + 1) + 1; int t2 = (W - 1) / (M + 1) + 1;
-
두 번째 접근법(다른 분 블로그)
- 블로그와 다르게 타입캐스팅이 필요!
t1 = ceil((double)H / (N + 1)); t2 = ceil((double)W / (M + 1));
- 전체 코드
#include <iostream>
#include <cmath>
using namespace std;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int H, W, N, M;
cin >> H >> W >> N >> M;
// 풀이 1
int t1 = (H - 1) / (N + 1) + 1;
int t2 = (W - 1) / (M + 1) + 1;
// 풀이 2
t1 = ceil((double)H / (N + 1));
t2 = ceil((double)W / (M + 1));
cout << t1 * t2;
}
- 참고
- 내림 floor(N);
- 반올림 floor(N + 0.5);