본문 바로가기

문제풀이/C 문제풀이

[SWEA]8104 조 만들기

1 k
2 2K-k+1
3 2K+k
4 4K-k+1
5 4k+k
.
.
.
문제에서 등수는 이런 식으로 증가한다 (N개의 행과 K개의 열을 가지고 있고 n은 행 번호, k는 열 번호라고 가정할 때)

잘 살펴보면 1행과 2행을 더하면 2k+1, 3행과 4행을 더하면 6k+1과 같이 규칙을 띈다.
이를 고등학생 때 배운 수열에 대입하면 an = (4n-2)K+1이 나온다
수열의 합을 구하면 Sn = (2Kn+1)n 이 나온다.
하지만 언제나 짝수 개의 행이 나오지는 않으므로 N이 홀수이면 Sn = (2Kn+1)n - ((N+1)K-k+1)이 된다.
이를 코드로 다음과 같이 나타낼 수 있다

#include <stdio.h>
int main(void)
{
	int test_case;
	int T;
	setbuf(stdout, NULL);
	scanf("%d", &T);
    
	for (test_case = 1; test_case <= T; ++test_case)
	{
		int N, K, n, s, a;
		printf("#%d", test_case);
		scanf("%d %d", &N, & K);
		n=(N/2)+(N%2); // 1행이 끝일 때, 2행이 끝일 때는 n=1 / 3행이 끝일 때, 4행이 끝일 때는 n=2 ...
		s = (2*K*n+1)*n; // 수열의 합
		for (int k=1;k<=K;k++) {
			if (N%2==0) printf(" %d", s);
			else printf(" %d", s-((N+1)*K-k+1)); // 행이 홀수 개일 때
			if (k==K) printf("\n");
		}
	}
	return 0; //정상종료시 반드시 0을 리턴해야 합니다.
}


'문제풀이 > C 문제풀이' 카테고리의 다른 글

[SWEA]8500 극장 좌석  (0) 2019.09.18
[SWEA]7732 시간 개념  (0) 2019.09.17
[SWEA]8457 알 덴테 스파게티  (0) 2019.09.16
[SWEA]8338 계산기  (0) 2019.09.10
[SWEA]5431 민석이의 과제 체크하기  (0) 2019.09.10