블램의 일상 IT카페

백준 3003번 [킹, 퀸, 룩, 비숍, 나이트, 폰] - if ~ else 조건문을 이용해 풀이. 본문

IT/알고리즘 문제 풀이

백준 3003번 [킹, 퀸, 룩, 비숍, 나이트, 폰] - if ~ else 조건문을 이용해 풀이.

ble_ram 2022. 11. 15. 19:40

문제.


 

 

내가 틀린 이유.


: 우선 이 문제는 조건문을 이용하지 않아도 풀 수 있다.

하지만 나는 조건문을 사용하도록 유도하는 문제라 생각하여 조건문을 이용해야한다는 강박에 있었고(?)

그 결과 풀어냈다.

(조건문 이외에 더 쉽게 푸는 방법도 많다. 이건 따로 찾아보시거나 스스로 나의 풀이를 참고하여 생각해보시길.)

 

또한 수학적 사고가 부족하여 king의 변수 - 1 이런식으로 고집했다.

만약 수학적으로 뛰어났다면 금방 변수부분이 고정값이 아니라 변하는 부분에 와야한다고 생각했을거다.

 

ex: king - 1 (x) : king에 어떤 수를 넣더라도 문제조건에 맞지 않는다.

      1 - king (o) : 조건에 부합한다.

 

정말 수학의 중요성을 느낀다.

 

 

풀이.


#include <stdio.h>
int main() {
	int king, q, l, bi, kn, p;
	int a, b, c, d, e, f;
	scanf("%d %d %d %d %d %d", &king, &q, &l, &bi, &kn, &p);

	if (king == 1) {
		a = 0;
	}
	else if (king < 1) {
		a = 1 - king;
	}
	else {
		a = 1 - king;
	}

	if (q == 1) {
		b = 0;
	}
	else if (q < 1) {
		b = 1 - q;
	}
	else {
		b = 1 - q;
	}

	if (l == 2) {
		c = 0;
	}
	else if (l < 2) {
		c = 2 - l;
	}
	else {
		c = 2 - l;
	}

	if (bi == 2) {
		d = 0;
	}
	else if (bi < 2) {
		d = 2 - bi;
	}
	else {
		d = 2 - bi;
	}

	if (kn == 2) {
		e = 0;
	}
	else if (kn < 2) {
		e = 2 - kn;
	}
	else {
		e = 2 - kn;
	}

	if (p == 8) {
		f = 0;
	}
	else if (p < 8) {
		f = 8 - p;
	}
	else {
		f = 8 - p;
	}

	printf("%d %d %d %d %d %d", a, b, c, d, e, f);

	return 0;
}

//상당히 비효율적인 흠흠;; 하지만 나의 코드로는 같은 수가 되었을때 0을 출력할 수있다!

이외에도 간단한 방법 많은 방법이 있으니 직접 찾아보길 바란다.

다양한 코드를 보며 많은 생각을 갖게해준다...

 

직접 찾아본 또 다른 좋은 풀이 (이건 내가 따로 보고싶어서 올림..)

#pragma warning(disable:4996)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>


int main() {
	int k, q, l, b, n, p;
	scanf("%d %d %d %d %d %d", &k, &q, &l, &b, &n, &p);
	printf("%d %d %d %d %d %d", 1-k, 1-q, 2-l, 2-b, 2-n, 8-p);

	return 0;
}

//백준 아이디 dign3050님 풀이.

Comments