소스코드
#include <stdio.h>
int main(){
int a, b, i, j;
scanf("%d %d", &a, &b);
char castle[a][b];
for (i=0; i<a; i++){
scanf("%s", castle[i]);
}
int row = 0;
int col = 0;
int temp;
for (i=0; i<a; i++){
temp = 0;
for(j=0; j<b; j++){
if (castle[i][j] == 'X') {
temp++;
}
}
if (temp == 0) row++;
}
for (i=0; i<b; i++){
temp = 0;
for(j=0; j<a; j++){
if (castle[j][i] == 'X') {
temp++;
}
}
if (temp == 0) col++;
}
if (row<col) printf("%d", col);
else printf("%d", row);
}
해설
요즘 코딩하면서 느낀 점이.. 진짜한참더늘어야된다는거랑 생각한 것을 구현할 때에 코드의 순서와 위치가 매우매우 중요하다는 거..
이 문제도 코드 위치를 잘못 짜서 한참 돌아왔다. 문자열 받는 게 잘못된 건 줄 알고..
경비원이 'X'로 표시되어 있으니까, 경비원이 한 명도 없는 행/열 개수를 저장하고, 둘 중에 큰 것을 출력하면 최소로 필요한 경비원의 수가 된다. 이 발상은 괜찮았는데.. 구현이 오래 걸렸다.
for (i=0; i<a; i++){
temp = 0;
for(j=0; j<b; j++){
if (castle[i][j] == 'X') {
temp++;
}
}
if (temp == 0) row++;
}
경비원이 하나도 없는 행의 개수를 구하는 부분이다. temp = 0;의 위치를 잘못 넣어서 계속 틀리게 나왔다....
첫번째 for문에서는 행을 지정하고, 두번째 for문에서는 그 행의 요소 하나하나를 'X'와 비교하여 'X'가 맞으면 temp에 하나를 더하고, 아니면 그냥 넘어가는 식으로 코드를 짠 뒤 마지막에 temp가 0일 경우 (=row에 X가 하나도 없을 경우) row에 1을 더하는 방식으로 코드를 짰다.
temp = 0; 를 두 번째 for문 안에 넣어두고 뭐가 틀렸는지 한참 찾았다..........
그렇게 해두면 요소 하나하나를 비교하고 temp가 초기화되니 당연히 이상하게 나온다.
'solving > C, C++' 카테고리의 다른 글
[백준] 1356번 유진수 (숫자 배열로 받기, 배열에서 index 이동시키기) (0) | 2022.09.05 |
---|---|
[백준] 1296번 팀 이름 정하기 (변수 설정, strcmp) (0) | 2022.09.04 |
[백준] 1032번 명령 프롬프트 (0) | 2022.09.01 |
[백준] 25177번 서강의 역사를 찾아서 (0) | 2022.09.01 |
[백준] 2525번 오븐 시계 (0) | 2022.08.31 |