2022년 7월 7일에 작성됨
https://www.codeup.kr/problem.php?id=1098
[기초-2차원배열] 설탕과자 뽑기
C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요. - 모든 내용
www.codeup.kr
문제 분석
h, w
n
l, d, x, y
를 입력했을 때 격자판의 상태를 출력한다.
소스 코드 (⭕)
#include <stdio.h>
int main()
{
int arr[101][101] = { 0, }; //arr[세로][가로] 배열 선언하고 0으로 초기화
int h, w, n, l, d, x, y; // 세로(h), 가로(w), 막대 수(n), 막대 길이(l), 방향(d), 죄표(x,y)
int i, j;
scanf("%d %d", &h, &w); // 격자판의 세로, 가로
scanf("%d", &n); // 놓을 막대의 개수
for (i = 1; i <= n; i++) {
scanf("%d %d %d %d", &l, &d, &x, &y); // 막대의 길이, 방향, 좌표, (d: 가로는 0, 세로는 1)
if (d == 0) { // 막대 방향 가로일 때
for (j = 0; j < l; j++) {
arr[x][y + j] = 1;
}
}
else { // 막대 방향 세로일 때
for (j = 0; j < l; j++) {
arr[x + j][y] = 1;
}
}
}
for (i = 1; i <= h; i++) { // 한 줄(위에서 아래로) 씩
for (j = 1; j <= w; j++) { // 한 열(왼쪽에서 오른쪽으로) 씩
printf("%d ", arr[i][j]); // 값 출력
}
printf("\n"); // 줄 바꾸기
}
return 0;
}
코드 분석
1. 격자판의 최대는 (100 x 100)크기 이므로 세로, 가로가 101인 배열을 선언하고 0으로 초기화 해준다. (배열 마지막엔 NULL값이 들어가기 때문)
2. 격자판의 세로 가로, 막대 개수 n을 입력받고, for문 반복문을 사용하여 n번의 막대 길이, 방향, 좌표를 입력받는다.
3. if~else 문은 막대 방향이 가로와 세로일 때로 나누어 입력받은 좌표를 기준으로 막대의 길이(l) 만큼 해당 배열의 위치를 1로 지정해준다.
(배열은 arr[세로][가로] 형태이다. 흔히 생각하는 좌표 평면에서의 x, y랑 헷갈리지 않도록 주의!)
4. 마지막으로 격자판의 크기 만큼 상태를 출력해준다.
end
변수가 많아서 반복문 조건식을 세우고 배열 식을 만드는 것이 좀 헷갈렸다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[C]프로그래머스_Lv1 : 나머지가 1이 되는 수 찾기 (1) | 2023.05.02 |
---|---|
[C]코드업_1099 : [기초-2차원배열] 성실한 개미 (2) | 2023.05.01 |
[C]코드업_1097 : [기초-2차원배열] 바둑알 십자 뒤집기 (0) | 2023.04.30 |
[C]코드업_1096 : [기초-2차원배열] 바둑판에 흰 돌 놓기 (0) | 2023.04.29 |
[C]백준_2292 : 벌집 (0) | 2023.04.28 |