[백준 BOJ] 18883번 N M 찍기 (C언어)

2022. 2. 14. 23:40PS (Program Solving)/BOJ (백준)

문제 설명

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

 

18883번: N M 찍기

총 N개의 줄을 출력해야 한다. 각 줄에는 M개의 정수를 공백 한 칸으로 구분해 출력해야 한다. 1번 줄에는 1부터 M까지, 2번 줄에는 M+1부터 2×M까지, ..., N번 줄에는 (N-1)×M+1부터 N×M까지 출력해야

www.acmicpc.net

백준 BOJ 18883번 N M 찍기 문제 사진

 

접근 방법 - 수학적 사고력을 필요로 하는 문제

백준의 18883번 문제는 수학적 사고력을 이용하여 해결해야 하는 문제이다.

해당 문제는, 입력받은 n과 m에 대해서, 1부터 n*m까지의 숫자를 m*n 형태로 출력해야 하는 문제이다.

필자는 숫자를 출력하는 데에 사용하는 변수를 따로 하나 선언해두고 연산을 시작하였다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

(만일 출력이 알맞게 되는데도 정답이 뜨지 않는다면, 모든 줄은 공백이 아닌 줄바꿈(\n)으로 끝나야 한다는 문제의 설명을 꼭 참고하여라.)

 

코드의 실행 순서

1) n과 m을 입력받는다.

 

2) 연산을 시작하기 전, num 변수를 1로 초기화한 뒤 선언한다. (여기서 num은 출력에 사용된다.)

 

3) n과 m을 이용해 이중 반복문을 실행한다. (n은 세로줄, m은 가로줄로 둔다.)

- 현재 num에 저장된 값을 출력한다.

- 만약 num이 m에 나누어 떨어진다면, 이는 해당 줄의 마지막 숫자이다. 따라서 이 경우엔 공백을 출력하지 않게끔 한다.

반대로 num이 m에 나누어 떨어지지 않는다면, 공백을 출력하게끔 한다.

- 위의 연산이 끝나면, num에 1을 더한다.

- 한 줄씩 출력이 끝날 때마다 개행(\n)을 수행한다.

 

4) 모든 출력이 끝나면 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>

//백준 18883번 코드
int main() {
	int n, m;
	scanf("%d %d", &n, &m);

	int num = 1;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			printf("%d", num);
			if (num % m != 0) { printf(" "); }
			num++;
		}
		printf("\n");
	}
}

 

제출 결과

백준 BOJ 18883번 N M 찍기 문제 C 제출 결과

(2021.12.26 백준 18883번 문제 제출 결과)

반응형