본문 바로가기
⌨️ Algorithm/C

1/6 [C] 백준 3076번 - 상근이의 체스판

by Lucy Oh 2022. 1. 6.

<문제>

 

https://www.acmicpc.net/problem/3076

 

3076번: 상근이의 체스판

출력은 R * A행 C * B열로 이루어져 있어야 하며, 문제에서 설명한 상근이의 체스판을 출력한다.

www.acmicpc.net

 

<내가 제출한 코드>

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
	int r, a, c, b;
	int i,j,k,l;
	int arr[10][10] = { 0 };
	scanf("%d %d", &r, &c);
	scanf("%d %d", &a, &b);

	for (i = 0; i < r; i++) {
		for (j = 0; j < a; j++) {
			for (k = 0; k < c; k++) {
				for (l = 0; l < b; l++) {
					if ((i + k) % 2 == 0) printf("X");
					else printf(".");
				}
			}
			printf("\n");
		}
	}
	return 0;
}

(생각보다 아이디어는 간단했는데 머리가 복잡해서 오래걸렸다. ... 아쉽)

 

변수 i, j, k, l 을 선언하여 각각 r, a, c, b 의 역할을 맡게(?) 했다.

 

4중 반복문을 생각한다는게~ 좀 어려웠는데 변수가 4개니까 잘 생각해서 한번 뇌가 뚫리면 쉽게 생각할 수 있다.

 

X와 . 출력을 생각하는 게 가장 어려웠는데 쉽게 생각해보면 예를 들어 이러한 문제가 나왔다고 치자,

 

X와 . 으로 표시해야 하는 곳을 한 덩어리라고 가정해서 생각해보면 이러한 표를 만들 수 있다.

 

  k=0 k=1 k=2 k=3
i=0 X . X .
i=1 . X . X
i=2 X . X .
i=3 . X . X
i=4 X . X .

X, . 과 i,k과의 관계를 생각해보면 i+k가 짝수일때 X이고 홀수일때 . 이 출력된다.

 

이를 이용하여 

if ((i + k) % 2 == 0) printf("X");
else printf(".");

이부분의 코드를 짤 수 있었고,

 

한 줄을 모두 출력하고나서는 줄바꿈을 하기 위하여 printf("\n")도 잊지않고 출력해주었다.

댓글