혜랑's STORY

[여름방학 6주차 C과제] 본문

2020 SISS 21기 활동/여름방학 C언어

[여름방학 6주차 C과제]

hyerang0125 2020. 8. 15. 13:11

#SWEA 1284 : 수도 요금 경쟁

SWEA 1284번 문제

- 풀이

A사 요금 : 1리터 당 요금(P) * 사용한 수도의 양(W)

B사 요금

(1) 사용한 수도의 양(W)이 R리터 보다 많은 경우 : R리터 이하 요금(Q) + 사용한 수도에서 R리터를 제외한 양(W-R) * 1리터 당 요금(S)

(2) 사용한 수도의 양(W)이 R리터와 같거나 적은 경우 : R리터 이하 요금(Q)

 

#include <stdio.h>

int A(int P, int W) {
	return P * W;
}

int B(int Q, int R, int S, int W) {
	if (W > R)
		return Q + (W - R) * S;
	else
		return Q;
}

int main() {
	int t;
	scanf_s("%d", &t);

	for (int i = 1; i <= t; i++) {
		int P, Q, R, S, W;
		scanf_s("%d %d %d %d %d", &P, &Q, &R, &S, &W);

		if (A(P, W) > B(Q, R, S, W))
			printf("#%d %d\n", i, B(Q, R, S, W));
		else
			printf("#%d %d\n", i, A(P, W));
	}

	return 0;
}

- 실행결과

SWEA 1284 실행결과

 

#SWEA 1974 : 스도쿠 검증

SWEA 1974번 문제

- 풀이

 먼저 같은 줄에서 1에서 9까지의 숫자들을 한 번씩 넣었는지 확인하기 위해서 정답인 줄을 다 합한 45와 문제에 주어진 줄의 합이 45와 같은지 확인한다. 마찬가지로 3*3의 숫자의 합이 45가 되는지 확인하여 45와 같지 않다면 return 0을 보내고 모두 만족시킨다면 return 1을 보낸다. 

 [줄을 검사하는 코드]

이중for문을 이용하여 x[i][j](행)와 x[j][i](열)의 총 합이 45인지 확인한다.

	//한 줄 검사
	for (int i = 0; i < 9; i++) {
		int vsum = 0;
		int hsum = 0;
		for (int j = 0; j < 9; j++) {
			vsum += x[i][j];
			hsum += x[j][i];
		}
		if (vsum != 45) return 0;
		if (hsum != 45) return 0;
	}

[3x3을 검사하는 코드]

 다중 for문을 이용하여 위의 방식과 마찬가지로 칸의 총 합이 45인지 확인한다. 이때, x[i*3+k][j*3+l]은 i와 j의 값에 따라 몇 번째 칸인지 짐작하여 볼 수 있다. 

3*3코드 도식화

	//3x3 검사
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			int sum = 0;
			for (int k = 0; k < 3; k++) {
				for (int l = 0; l < 3; l++) {
					sum += x[i * 3 + k][j * 3 + l];
				}
			}
			if (sum != 45) return 0;
		}
	}

[전체 코드]

#include <stdio.h>

int x[9][9];

int sudoku() {
	//한 줄 검사
	for (int i = 0; i < 9; i++) {
		int vsum = 0;
		int hsum = 0;
		for (int j = 0; j < 9; j++) {
			vsum += x[i][j];
			hsum += x[j][i];
		}
		if (vsum != 45) return 0;
		if (hsum != 45) return 0;
	}
	//3x3 검사
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			int sum = 0;
			for (int k = 0; k < 3; k++) {
				for (int l = 0; l < 3; l++) {
					sum += x[i * 3 + k][j * 3 + l];
				}
			}
			if (sum != 45) return 0;
		}
	}

	return 1;
}

int main() {
	int t;
	scanf_s("%d", &t);

	for (int i = 1; i <= t; i++) {
		for (int j = 0; j < 9; j++) {
			for (int k = 0; k < 9; k++) {
				scanf_s("%d", &x[j][k]);
			}
		}
		printf("#%d %d\n", i, sudoku());
	}

	return 0;
}

- 실행결과

SWEA 1974 실행 결과

'2020 SISS 21기 활동 > 여름방학 C언어' 카테고리의 다른 글

[여름방학 8주차 C과제]  (0) 2020.08.30
[여름방학 7주차 C과제]  (0) 2020.08.20
[여름방학 5주차 C과제]  (0) 2020.08.07
[여름방학 4주차 C과제]  (0) 2020.08.02
[여름방학 3주차 C과제]  (0) 2020.07.24