본문 바로가기
⌨️ Algorithm/C

1/6 [C] 백준 1440번 - 타임머신

by Lucy Oh 2022. 1. 6.

<문제>

 

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

 

1440번: 타임머신

첫째 줄에 시간이 주어진다. 시간은 DD:DD:DD와 같은 꼴로 주어진다. 항상 8자리(:도 포함)로만 들어오며, D는 0-9 사이의 숫자이다.

www.acmicpc.net

 

 

<내가 제출한 코드>

 

#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를 출력하면 끝 ~

 

댓글