본문 바로가기
[개발자 로드맵]/C

[C언어 코딩 도장 심사문제 답] 38.7_단위행렬 만들기

by Ramrider 2022. 7. 18.
728x90
반응형

1. 답

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int number;

	scanf("%d", &number);

	int **m = malloc(sizeof(int*) * number);

	for (int i = 0; i < number; i++)
	{
		m[i] = malloc(sizeof(int) * number);
	}


	for (int i = 0; i < number; i++)
	{
		for (int j = 0; j < number; j++)
		{
			if (i == j)
				m[i][j] = 1;
			else
				m[i][j] = 0;
			printf("%d ", m[i][j]);
		}
		printf("\n");
	}

	for (int i = 0; i < 3; i++)
	{
		free(m[i]);
	}
	free(m);

	return 0;

}

2. 결과

실행결과

3. 정리

다른 방식으로 작성해 본다면, 아래와 같이 짜도 괜찮습니다. 큰 차이는 없지만 memset함수를 이용해서 0으로 모두 초기화를 시키는 방식이 조금 다릅니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	int number;

	scanf("%d", &number);

	int** m = malloc(sizeof(int*) * number);

	for (int i = 0; i < number; i++)
	{
		m[i] = malloc(sizeof(int) * number);
		memset(m[i], 0, sizeof(int) * number);
	}

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

	for (int i = 0; i < 3; i++)
	{
		free(m[i]);
	}
	free(m);

	return 0;

}

4. 비고

 

코딩 도장: 사이트에 로그인

사이트의 강좌를 수강하고 학습 효과를 최대한 높이려면 회원 가입이 필요합니다. '회원 가입' 버튼을 클릭한 후 가입 정보를 입력합니다.입력한 이메일 주소로 확인 메일이 즉시 전송됩니다.이

dojang.io

 

728x90
반응형

댓글