혜랑's STORY

[2020-2학기 C과제 추가] 본문

2020 SISS 21기 활동/2학기 C언어

[2020-2학기 C과제 추가]

hyerang0125 2020. 9. 15. 16:13

#SWEA 10059 : 유효기간

SWEA 10059번 문제

- 풀이

 먼저 a와 b라는 변수를 만들어 입력받은 4자리를 각각 앞에 두 문자, 뒤에 두 문자로 구분지어 준다. 이후 a가 달의 조건(13보다 작고 0이 아니다.)을 만족하고 b 또한 달의 조건을 만족한다면 "AMBIGUOUS"를 출력하고 b가 달의 조건을 충족하지 못한다면 "MMYY"를 출력한다. 반대로 a가 달의 조건을 만족하지 못하고 b가 달의 조건을 만족한다면 "YYMM"이 되고 b 또한 달의 조건을 만족하지 못한다면 "NA"를 출력한다. 이 문제를 해결할 때 놓치기 쉬운 부분은 바로 월은 '0'이 될 수 없다는 사실이니 주의하여 문제를 해결해야한다.

- 코드

#include <stdio.h>

int main() {
	int T, card;
	scanf("%d", &T);

	for (int tc = 1; tc <= T; tc++) {
		scanf("%d", &card);

		int a = card / 100;
		int b = card % 100;

		if (a < 13 && a !=0) {
			if (b < 13 && b != 0)
				printf("#%d AMBIGUOUS\n", tc);
			else
				printf("#%d MMYY\n", tc);
		}

		else {
			if (b < 13 && b != 0)
				printf("#%d YYMM\n", tc);
			else
				printf("#%d NA\n", tc);
		}
	}

	return 0;
}

 

- 실행결과

SWEA 10059번 실행결과

 

#SWEA 10032번 : 과자 분배

SWEA 10032번 문제

- 풀이

 이 문제가 원하는 답은 가장 많이 받은 사람과 적게 받은 사람의 차이가 최소가 되는 것이다. 이 문제를 해결하기 위해선 한 명씩 돌아가며 과자를 받으면 되고 과자의 수(N)이 사람의 수(K)보다 크거나 같으면 모든 사람이 고자를 동등하게 받을 수 있다는 것으로 max와 min 모두에 1을 더하고 과자의 수에서 과자를 나누어준 만큼(사람의 수)을 뺀다. 그러나 과자의 수가 사람의 수보다 작아지지만 0이 아닐때, 가장 많이 받은 사람이 존재하게 나오는 것이므로 max에 1을 더하고 반복문을 탈출한다. 이 외의 모든 상황은 max와 min의 값이 동일함으로 가장 많이 받은 사람과 적게 받은 사람의 차이가 0이 되는 것이다. 

- 코드

#include <stdio.h>
#include <stdlib.h>

int main() {
	int T, N, K;
	scanf("%d", &T);

	for (int tc = 1; tc <= T; tc++) {
		scanf("%d %d", &N, &K);
		int max_cnt = 0, min_cnt = 0;

		while (1) {
			if (N >= K) {
				max_cnt++;
				min_cnt++;
				N -= K;
			}
			else if (N < K && N != 0) {
				max_cnt++;
				break;
			}
			else
				break;
		}

		printf("#%d %d\n", tc, max_cnt - min_cnt);
	}

	return 0;
}

 

- 실행결과

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

[2020-2학기 C과제 6주차]  (0) 2020.11.07
[2020-2학기 C과제 4주차]  (0) 2020.10.02
[2020-2학기 C과제 3주차]  (0) 2020.09.21
[2020-2학기 C과제 2주차]  (0) 2020.09.15
[2020-2학기 C과제 1주차]  (0) 2020.09.04