문제 링크 : https://softeer.ai/practice/9657
틀린 코드
- 시간 초과 떴음. for문 범위를 잘못 설정했음. 배열의 인덱스(0,1,2,...)와 번째 수(1,2,3,...)가 다르다는 거를 유의할 것.
- 환경 파괴범의 위치를 2차원 배열에 굳이 다 저장할 필요 없고, 각 행에 몇 명 있는지만 저장하면 됨. g[n][m] 없애고 arr[n] 사용하도록 코드 고쳤음.
- 숲의 요정이 지나가는 행에 있는 환경 파괴범의 인원이 1명 이상이라면 그 행들의 인원 수만 1씩 줄이면 됨. 공격이 두 번 시행되므로 이와 같이 인원 수를 줄이는 동작을 두 번 시행.
#include<bits/stdc++.h>
using namespace std;
int n,m, l,r, ll, rr;
int main(void){
cin >> n >> m;
int g[n][m];
int cnt = 0;
for (int i=0; i<n; i++){
for (int j=0; j<m; j++){
cin >> g[i][j];
if (g[i][j] == 1){
cnt++;
}
}
}
cin >> l >> r;
cin >> ll >> rr;
for (int i=l+1; i<l+5; i++){
while (true){
for (int j=0; j<m; j++){
if (g[i][j]==1){
g[i][j] = 0;
cnt--;
break;
}
}
}
}
for (int i=ll+1; i<ll+5; i++){
while (true){
for (int j=0; j<m; j++){
if (g[i][j]==1){
cnt--;
break;
}
}
}
}
cout << cnt;
return 0;
}
맞힌 코드
#include<bits/stdc++.h>
using namespace std;
int n,m, l,r, ll, rr;
int main(void){
cin >> n >> m;
int arr[n] = {0,};
int cnt = 0;
int x;
for (int i=0; i<n; i++){
for (int j=0; j<m; j++){
cin >> x;
if (x == 1){
arr[i]++;
}
}
}
cin >> l >> r;
cin >> ll >> rr;
for (int i=l-1; i<l+4; i++){
if (arr[i]>0){
arr[i]--;
}
}
for (int i=ll-1; i<ll+4; i++){
if(arr[i]>0){
arr[i]--;
}
}
for (int i=0; i<n; i++){
cnt += arr[i];
}
cout << cnt;
}
'Algorithm' 카테고리의 다른 글
[백준/BOJ] 20125번 쿠키의 신체 측정 C++ (0) | 2024.11.07 |
---|---|
[백준/BOJ] 9655번 돌 게임 C++ (0) | 2024.11.07 |
[백준/BOJ] 2292번 벌집 C++ (0) | 2024.10.15 |
[백준/BOJ] 23971번 ZOAC 4 (0) | 2024.10.15 |
[알튜비튜] 01. 정렬 (0) | 2023.07.04 |