3003 킹, 퀸, 룩, 비숍, 나이트, 폰

Updated:

3003 킹, 퀸, 룩, 비숍, 나이트, 폰

[Baekjoon] 3003 킹, 퀸, 룩, 비숍, 나이트, 폰, 문제 풀이.
프로그래밍 언어: C

문제

3003 킹, 퀸, 룩, 비숍, 나이트, 폰

접근

원래 Python을 하다가 와서 그런지 모르는 게 많았다. 특히 문자를 입력받는 문법이 생각보다 자유로웠다.
일단 문제 자체는 어렵지 않다. 접근도 손쉽게 했다. 기존 체스말의 수를 배열로 형성하고 사용자의 입력도 배열로 형성하여 둘의 각 요소값을 빼주어 출력해주면 되겠다고 생각했다.

	int chess_list[6] = { 1, 1, 2, 2, 2, 8 }; // 기준 배열
	int user_list[6] = { 0, };                // 사용자 입력 배열
	int result[6] = { 0, };                   // 결과 배열

C 언어에서는 배열 선언을 할 때에도 서식 지정자를 사용해야 하며, { 0, }으로 모든 요소를 0으로 초기화가 가능하다.
코드 작성에 있어 어려웠던 점은 사용자 입력을 공백을 기준으로 받는 방식이었다.

scanf("%d %d %d %d %d %d", ...);

처음에는 위와 같은 방식으로 접근했다. 하지만 배열의 각 주소에 할당하는 것이 어려워보였고, 요소끼리의 차를 구하는 데에도 효율적이지 않았다. 그래서 다음과 같은 코드로 바꾸었다.

	for (int i = 0;i < 6;i++) {
		scanf("%d", &user_list[i]);

		result[i] = chess_list[i] - user_list[i]; // 각 값을 빼서 계산 

반복문을 이용하면, scanf() 함수를 이용하여 각 배열 주소에 할당할 수 있을 뿐더라 계산 과정에도 손쉽게 계산을 할 수 있었다.
마지막으로 출력 과정에서 공백을 기준으로 숫자를 나눌 필요가 있었는데, Python에서는 sep=’‘를 이용하여 공백자를 출력했었다.

		printf("%d ", result[i]); // %d 뒤에 공백

생각해보니 C 언어에서는 손쉽게 %d 뒤에 공백을 추가함으로서 계속 연결시키는 게 가능했다.

전체 코드

#include <stdio.h>

int main(void)
{
	int chess_list[6] = { 1, 1, 2, 2, 2, 8 }; // 기준 배열
	int user_list[6] = { 0, };                // 사용자 입력 배열
	int result[6] = { 0, };                   // 결과 배열

	for (int i = 0;i < 6;i++) {
		scanf("%d", &user_list[i]);

		result[i] = chess_list[i] - user_list[i]; // 각 값을 빼서 계산 

		printf("%d ", result[i]); // %d 뒤에 공백
	}
	return 0;
}

개선 및 부족한 사항

  • 배열 선언과 배열 요소끼리 값 계산에 대한 이해가 부족하다.
  • 사용자 입력과 출력에 대한 이해가 부족하다.

Leave a comment