반응형
8.22 화요일
구름톤 문제!
무지 쉬운 완전탐색이었다.
근데 count 함수에서 입력이 (0,0) 일때, (-1,0) 등에 접근할 수 있는 위험이 있는데
이런 부분은 안 잡아주었다.
이렇게 풀었지만
#include <iostream>
using namespace std;
long long N, K;
int board[1001][1001];
int dist[1001][1001];
void count (int r, int c){
int dir[8][2] = {{1,0}, {-1, 0}, {0,1}, {0,-1}, {1,1}, {-1, 1}, {-1, -1}, {1, -1}};
int count = 0;
for(int i = 0; i < 8; i++){
int x = r + dir[i][0];
int y = c + dir[i][1];
if(board[x][y] == 1)
count++;
}
dist[r][c] = count;
}
int main() {
cin >> N >> K;
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
cin >> board[i][j];
}
}
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
if(board[i][j] == 0)
count(i,j);
}
}
int ans = 0;
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
if(dist[i][j] == K)
ans++;
}
}
cout << ans ;
return 0;
}
if(x < 0 || y < 0 || x > N ||| y > N)
continue;
이 문장을 추가해주어야 한다. 아래처럼.
#include <iostream>
using namespace std;
long long N, K;
int board[1001][1001];
int dist[1001][1001];
void count (int r, int c){
int dir[8][2] = {{1,0}, {-1, 0}, {0,1}, {0,-1}, {1,1}, {-1, 1}, {-1, -1}, {1, -1}};
int count = 0;
for(int i = 0; i < 8; i++){
int x = r + dir[i][0];
int y = c + dir[i][1];
if(x < 0 || y < 0 || x > N ||| y > N)
continue;
if(board[x][y] == 1)
count++;
}
dist[r][c] = count;
}
int main() {
cin >> N >> K;
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
cin >> board[i][j];
}
}
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
if(board[i][j] == 0)
count(i,j);
}
}
int ans = 0;
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
if(dist[i][j] == K)
ans++;
}
}
cout << ans ;
return 0;
}
분발하자 구름톤!
반응형
'알고리즘 > 구름톤 챌린지' 카테고리의 다른 글
구름톤 4주차 후기 (1) (0) | 2023.09.04 |
---|---|
구름톤 후기 3주차 (2) (0) | 2023.08.29 |
구름톤 3주차 후기 - 1 (1) | 2023.08.28 |
구름톤 2주차 후기 -1 (0) | 2023.08.21 |
구름톤 챌린지 1주차 후기 (1) (0) | 2023.08.15 |