백준 저지의 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);