본문 바로가기
코딩테스트

[C언어] 백준 5554 풀이

by CuckooBird 2022. 5. 6.

문제

승균이는 매일 학교, PC방, 학원에 다닌다. 반복되는 일상에 익숙해진 승균이는 이동시간을 단축해서 PC방에 더 오래 머물고 싶었다. 그래서 스톱워치를 들고 이동할 때마다 기록을 잰 후 집에 가서 분석해보기로 했다.

집에 도착한 승균이는 측정한 결과를 보는 데, 전부 초 단위로 기록되어있다! 맨날 놀기만 해서 총 이동 시간이 몇 분 몇 초인지 계산을 못 하는 승균이를 도와주자.

하루 동안 측정한 결과가 주어지면, 이날의 총 이동 시간이 몇 분 몇 초인지 출력하는 프로그램을 작성하시오.


입력

입력은 총 4줄이며, 한 줄에 하나씩 양의 정수가 적혀있다.

  • 첫 번째 줄에 집에서 학교까지의 이동 시간을 나타내는 초가 주어진다.
  • 두 번째 줄에 학교에서 PC방까지의 이동 시간을 나타내는 초가 주어진다.
  • 세 번째 줄에 PC방에서 학원까지의 이동 시간을 나타내는 초가 주어진다. 
  • 마지막 줄에 학원에서 집까지의 이동 시간을 나타내는 초가 주어진다.

집에 늦게 가면 혼나기 때문에, 총 이동시간은 항상 1 분 0 초 이상 59 분 59 초 이하이다.


출력

총 이동시간 x 분 y 초를 출력한다. 첫 번째 줄에 x를, 두 번째 줄에 y를 출력한다.


풀이

집에서 학교까지의 이동 시간은 S1, 학교에서 PC방까지의 이동 시간은 S2, PC방에서 학원까지의 이동 시간은 S3, 학원에서 집까지의 이동 시간은 S4, 총 이동시간은 S 라고 하자.

그렇다면 S=S1+S2+S3+S4 라고 할 수 있겠다.

총 이동시간의 단위가 초 이므로, S에서 60을 나눠서 나오는 몫은 분(x)이, 나머지는 초(y)가 됨을 이용한다.

그러나 그저 60을 나누고 빼는 것은 재미없으므로 기호상수 define을 이용하여 M에 60을 넣어준 뒤에, M을 나누는 식으로 써본다.

조건문에 조건에 맞춰서 써놓는 것도 잊지말자.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define M 60

int main(void) {
	int S1, S2, S3, S4, S, x, y;

	scanf("%d", &S1);
	scanf("%d", &S2);
	scanf("%d", &S3);
	scanf("%d", &S4);

	S = S1 + S2 + S3 + S4;

	if (60 <= S && S <= 59 * M + 59) {
		x = S / M;
		y = S % M;

		printf("%d\n%d\n", x, y);
	}
	return 0;
}

후기

처음에 풀었을 때에는 조건을 넣지 않았다. 그래도 백준이 정답이라고 처리하길래 모르고 있다가 깨닫고 조건과 기호상수를 넣어서 다시 한번 제출을 했는데 틀렸다고 나오는 것이다. 왜 그런가봤더니 알아보기 쉽도록 "입력" "출력" 이라는 말을 printf 한것을 깜박했던 것이다.. ㅋㅋ 맞았던 코드도 다시 돌아보자..^^

'코딩테스트' 카테고리의 다른 글

[Python] 백준 4344 풀이  (0) 2022.12.30
[Python, C] 백준 1110번 풀이  (0) 2022.12.29
[Python] 백준 1546 풀이  (0) 2022.12.29
[C언어] 백준 3046 풀이  (0) 2022.05.05
[C언어] 백준 14681 풀이  (0) 2022.04.10