※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts