백준 알고리즘/Lang-C | C++

[백준/C] 5575번 타임 카드

Jongung 2021. 8. 18. 20:00

 

백준 온라인 저지 / 5575번 타임카드

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

 

5575번: 타임 카드

JOI 상사는 직원의 근무시간을 타임 카드로 관리하고있다. 직원들은 전용 장비를 사용하여 타임 카드에 출근 시간을 기록한다. 근무를 마치고 퇴근할 때도 타임 카드에 퇴근 시간을 기록한다.

www.acmicpc.net

 

  • 사용언어 : C (C99)
  • 알고리즘 : 수학, 구현, 사칙연산

 

 

 

C 코드

1. 문제 정리

 

6 * 3 총 18개 입력을 받아서 계산하는 문제이다.

일단 C로 할려하니 입력 받는 것 부터 헷갈렸는데.. 사실 이거 말고 다른 방법이 있을 것 같지만 C#처럼

그냥 배열로 받아오는 방식으로 해결 했다.

(C#에서는 배열 아니고 그냥 써도되는데 뭔가 ide에서 자꾸 출력을 해대서;;)

 

 

계산을 전부 초로 환산한 후 계산하고 다시 시/분/초로 만들어주는 공식을 사용했다.

 

2. 공식

 

딱히 어려울 것도 없다

 

t1 = h1 * 3600 + m1 * 60 + s1;
t2 = h2 * 3600 + m2 * 60 + s2;
T = t2 - t1;

H[i] = T / 60 / 60 % 24;
M[i] = T / 60 % 60;
S[i] = T % 60;

 

t1 t2로 앞에 받은 3개 값을 초로 그리고 t2로 뒤에 받은 값을 초로 받아 온 후 다시 환산해주었다.

 

 

 

3. 완성 코드

 

#include <stdio.h>

int main(void)
{
	int h1, m1, s1, h2, m2, s2;
	int T, t1, t2;
	int H[3], M[3], S[3];

	for (int i = 0; i < 3; i++) {
		scanf("%d %d %d %d %d %d", &h1, &m1, &s1, &h2, &m2, &s2);

		t1 = h1 * 3600 + m1 * 60 + s1;
		t2 = h2 * 3600 + m2 * 60 + s2;
		T = t2 - t1;

		H[i] = T / 60 / 60 % 24;
		M[i] = T / 60 % 60;
		S[i] = T % 60;
	}
	printf("%d %d %d\n%d %d %d\n%d %d %d\n", H[0], M[0], S[0], H[1], M[1], S[1], H[2], M[2], S[2]);
}