티스토리 뷰

Study/백준

10996번 별 찍기 - 21 in c

15051015 2020. 6. 17. 18:57

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

 

10996번: 별 찍기 - 21

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

www.acmicpc.net

 

 

 

 

code in c

 

#include <stdio.h>

void printstar();
int a;
int main() {

	int i, j, b;
	scanf("%d", &a);
	for (i = 1; i <= a; i++)
	{
		printstar();
		if (i == a)
			break;
		printf("\n");
	}

}

void printstar()
{
	int k;
	int f = 0; 
	f = a % 2;
	int p = a;
	int count=0;

	while (p > 1)
	{
		p = p - 2;
		count++;
	}

	if (f == 0)
	{
		for (k =0 ; k < count; k++ )
			printf("* ");
		printf("\n");
		for (k = 0; k < count; k++)
			printf(" *");
	}
	else if (f==1)
	{
		for (k = 0; k < count+1; k++)
			printf("* ");
		if(a!=1)
		printf("\n");
		for (k = 0; k < count; k++)
			printf(" *");

	}
}

 

풀이는 

 

우선 처음에는 규칙을 찾으려고 노력했다.

 

처음에 눈에 보였던 것은 입력값의 2배가 되는 줄의 길이였다.

 

또한 홀수와 짝수에 따라 모양이 달라진다고 생각했다.

 

홀수와 짝수에 따라 1,2 줄의 모양이 결정되고

 

전체줄수는 입력값 *2라는것을 알아챘다.

 

 

맨처음은 1,2,3,4,5,6 각각을 입력받아서 할 수 있을까 생각해보았지만 못할 것 같았다.

 

3단계의 걸쳐서 생각을 하게 되었는데,

 

1. 그렇다면 1,2 줄의 모양만 입력값에 따라 결정해주고 그것을 반복시키면 될 것 같다는 생각이 들었다.

 

그래서 input%2 를 이용하여 홀수와 짝수를 나누었다.

 

2. 짝수일때 1,2줄의 특성과 홀수일때의 1,2 줄의 특성을 나누어보았다.

 

짝수는 완성형 ( 위 아래의 별 개수가 같음 )

홀수는 미완성형 ( 위가 아래보다 한개 더 많음 )

이다.

 

그렇다면 홀수일때는 위를 아래보다 +1 해주면 될 것이다.

 

자 이제 별의 개수를 어떻게 결정지을 것인가?

 

3. 별의 개수는 두줄 중 적은 개수를 기준으로 생각하였다. ( 미완성형 일때 첫번째 줄에 +1을 해주면 될 것 )

 

별의 개수 또한 어떠한 규칙이 있는 것 같아 생각해보니, 일단 2가 관련되 있다는것은 확실했다. 처음에는 /2씩 하면 되지않을까 했지만 그건 5까지만 옳바른 값이 나오고 그 후는 나누기 특성상 숫자가 급격하게 줄어 든다는 것을 알게되었다. 그래서 -2로 수정 하니 옳바른 값이 나오게 되었다. 

 

3단계를 거친 후 마지막줄에 \n값만 있는 줄을 없애기위해 break; 를 사용하였다.

 

 

 

'Study > 백준' 카테고리의 다른 글

삼성 SW 역량 테스트 준비하기  (0) 2020.06.23
2884번 알람 시계 in c  (0) 2020.06.22
2446번 별 찍기 -9 in c  (0) 2020.06.17
2523번: 별 찍기 -13 in c  (0) 2020.05.18
5543번 상근날드 in c  (0) 2020.03.11
댓글
최근에 올라온 글
최근에 달린 댓글
250x250