※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 6127번 문제인 Super Paintball이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/6127
6127번: Super Paintball
The cows have purchased a Super Paintball Deluxe game set from Tycow, the cow-toy manufacturer. Bessie, knowing you can help, has partitioned the pasture into a set of N x N unit squares (1 <= N <= 100) and compiled a list of the K (1 <= K <= 100,000) loca
www.acmicpc.net
각 소가 서있는 위치를 기준으로 해당 소에게 paintball gun을 쏠 수 있는 모든 자리에 1씩 더해주자.
모든 소에 대해 위와 같은 작업을 한다면, 모든 소를 쏠 수 있는 위치에는 소의 전체 마릿수와 같은 수가 저장되어있게 된다.
위와 같은 내용을 반복문을 이용해 구현하고 문제를 해결하자.
각 소마다 확인해야하는 칸은 O(N)칸이므로 최종 시간복잡도는 O(NK + N^2)과 같다. 이는 문제를 해결하기에 충분한 시간복잡도이다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int N, K;
int arr[100][100];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> K;
for (int i = 0; i < K; i++) {
int r, c; cin >> r >> c; r--, c--;
arr[r][c]++;
for (int rr = r + 1; rr < N; rr++) arr[rr][c]++;
for (int rr = r - 1; rr > -1; rr--) arr[rr][c]++;
for (int cc = c + 1; cc < N; cc++) arr[r][cc]++;
for (int cc = c - 1; cc > -1; cc--) arr[r][cc]++;
for (int rr = r - 1, cc = c - 1; rr > -1 && cc > -1; rr--, cc--) arr[rr][cc]++;
for (int rr = r + 1, cc = c - 1; rr < N && cc > -1; rr++, cc--) arr[rr][cc]++;
for (int rr = r - 1, cc = c + 1; rr > -1 && cc < N; rr--, cc++) arr[rr][cc]++;
for (int rr = r + 1, cc = c + 1; rr < N && cc < N; rr++, cc++) arr[rr][cc]++;
}
int cnt = 0;
for (int r = 0; r < N; r++) {
for (int c = 0; c < N; c++) {
if (arr[r][c] == K) cnt++;
}
}
cout << cnt;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 6129 // C++] Obstacle Course (0) | 2022.09.11 |
---|---|
[BOJ 6128 // C++] Bessie's Secret Pasture (0) | 2022.09.10 |
[BOJ 6126 // C++] Cow Cash (0) | 2022.09.08 |
[BOJ 25287 // C++] 순열 정렬 (0) | 2022.09.07 |
[BOJ 23175 // C++] Histogram Sequence 3 (0) | 2022.09.06 |