<문제>
https://www.acmicpc.net/problem/1440
<내가 제출한 코드>
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int s[3], i;
int cnt1, cnt2, cnt4;
int a=0;
cnt1 = cnt2 = cnt4 = 0;
scanf("%d:%d:%d", &s[0], &s[1], &s[2]);
for (i = 0; i < 3; i++) {
if (s[i] == 0) cnt1++;
else if (s[i] > 12 && s[i] < 60) cnt1++;
else if (s[i] >= 1 && s[i] <= 12) cnt2++;
else cnt4++;
}
if (cnt2 >= 1) {
if (cnt4 >= 1) a = 0;
else a = cnt2 * 2;
}
else a = 0;
printf("%d", a);
return 0;
}
cnt1, cnt2, cnt4 (원래 3가 있었는데 사라져서 이름이 이상해졌지만 넘어가자)
시간에 해당하는 수를 모두 3개 입력하는데 각각 s 배열에 넣어준다. (cnt를 편하게 세기 위해 배열을 사용함)
배열의 원소는 아래의 네가지 경우중 하나에 해당하고, 해당하는 경우의 cnt를 올려주었다.
1. 0 -> cnt1++
2. 1이상 12이하 -> cnt2++
3. 12초과 60미만 -> cnt1++
4. 60이상 ->cnt4++
경우를 순서대로
1. 0인 경우 -> 분, 초 가능
2. 1이상 12이하 -> 시, 분, 초 가능
3. 12초과 60미만 -> 분, 초 가능
4. 60이상 -> 아무것도 해당되지 않음.
이기 때문에 1,3은 같은 경우로 따져서 똑같이 cnt1++ 을 해주었다.
여기서 2번째 경우만 '시' 로 따질 수 있기 때문에 무조건 2번째 경우를 따진 cnt2는 1이상이여야만 하고,
cnt4는 한번도 나와서는 안된다.
if (cnt2 >= 1) {
if (cnt4 >= 1) a = 0; //cnt4는 한번도 나와서는 안된다.
else a = cnt2 * 2;
}
else a = 0;
그렇게 해서 나온 부분이 위 코딩의 2번째 줄이고,
3번째 줄은 그렇다면 cnt1 + cnt2 = 3 이고 cnt2는 무조건 1이상임을 생각했을때 경우는
1. cnt1 = 2, cnt2 = 1
2. cnt1 = 1, cnt2 = 2
3. cnt1 = 0, cnt2 = 3
이다.
각각의 경우에서 나오는 경우의 수를 계산해보면
1. cnt1 = 2, cnt2 = 1 -----> 2
2. cnt1 = 1, cnt2 = 2 -----> 4
3. cnt1 = 0, cnt2 = 3 -----> 6
이므로 cnt2 * 2 임을 알수있다.
그래서 답으로 설정한 변수 a에 cnt2 * 2 값을 저장하게 시켰고,
이외의 경우는 모두 0을 저장하게 하였다.
a를 출력하면 끝 ~
'⌨️ Algorithm > C' 카테고리의 다른 글
1/10 [C] 백준 5426번 - 비밀 편지 (0) | 2022.01.24 |
---|---|
1/7 [C언어] 백준 23292번 - 코딩 바이오리듬 (0) | 2022.01.07 |
1/6 [C] 백준 3076번 - 상근이의 체스판 (0) | 2022.01.06 |
1/3 [C] 백준 21734번 - SMUPC의 등장 (0) | 2022.01.03 |
1/3 [C] 백준 6359번 - 만취한 상범 (0) | 2022.01.03 |
댓글