백준 온라인 저지 / 5928번 Contest Timing
https://www.acmicpc.net/problem/5928
- 사용언어 : C (C99)
- 알고리즘 : 수학, 사칙연산, 구현
C 코드
1. 문제 정리
입 출력을 알아보기 전에 영어 해석부터 해야 한다.
모르는 단어부터 천천히..
베시는 우유 생산 산업에 싫증을 느끼고 있으며, 흥미로운 새로운 컴퓨팅 분야로 전환하기를 원합니다. 코딩 실력을 향상시키기 위해, 그녀는 온라인 USACO 대회에 참가하기로 결심합니다. 그녀는 대회가 2011년 11월 11일(11/11/11)에 시작된다는 것을 알고 있기 때문에 문제를 다운로드하고 11월 11일 오전 11:11에 정확하게 코딩을 시작하기로 재미로 결정합니다.
안타깝게도, 베시의 시간 관리 능력이 상당히 떨어지기 때문에, 그녀는 대회에 3시간(180분) 이상의 시간이 걸리지 않도록 도와주는 퀵 프로그램을 만들고 싶어합니다. 그녀가 일을 그만두는 날짜와 시간을 감안할 때, 베시가 대회에 보낼 총 시간을 계산하도록 도와주세요.
이 정도로 해석 할 수 있겠다...
입 출력도 정리 해보자.
입력 | 첫 줄에는 베시가 대회를 종료하는 날짜와 시간을 지정하는 3개의 공백 구분 정수(D,H,M)가 포함되어 있습니다. D는 11 ~ 14범위의 정수입니다. H와 M은 24시간 시계를 기준으로 시간과 분입니다. |
출력 | 베시가 대회에 참가한 총시간을 출력하세요. 만약 그녀의 종료시간보다 시작시간이 빠를 경우 -1을 출력하세요. |
여담이지만 codeforce를 할려고 영어를 공부 하는데... 하다보니 토익까지 가게 된 나다 ㅋㅋ.. 어짜피 해야 할 거 부딪쳐 보자..
그래서 총 3가지의 입력을 받아 계산하는 문제이다.
단순한 시간 문제라 뭐 어렵지 않겠다..?
그러니깐 11일 11시 11분에 딱 코딩대회를 시작하는데 코딩을 종료한 시간을 우리가 입력하고 그걸 분으로 나타내라! 라고 한 줄 요약 할 수 있겠다.
2. 삼항 연산자 사용
그냥 분단위로 계산하면 되는 아주아주 쉬운 문제에 요즘 코드를 줄여야 한다는 압박감이 쫌 있어서 삼항 연산자를 사용 해 보려고 한다.
if문을 삼항 연산자로 사용해보자.
#include <stdio.h>
int main1()
{
int A = 1;
int B = 2;
if(A<B)
printf(1);
else
printf(0);
}
int main2()
{
int A = 1;
int B = 2;
printf("%d", A<B ? 1 : 0);
}
위에 거와 밑에 거가 다 똑같고 코드의 길이가 확연히 짧아졌다..
계산 방식을 알아 보자.
int time1 = 11 * 60 * 24 + 11 * 60 + 11;
int time2 = D * 60 * 24 + H * 60 + M;
int result = time2 - time1;
날짜와 시간까지 모두 분단위로 맞춰주고
입력된 시간 - 11일 11시 11분 해주면 간단하게 해결된다
이것과 삼항 연산자를 합쳐 완성코드를 작성해보자..
3. 완성 코드
#include <stdio.h>
int main() {
int D, H, M;
scanf_s("%d %d %d", &D, &H, &M);
int time1 = 11 * 60 * 24 + 11 * 60 + 11;
int time2 = D * 60 * 24 + H * 60 + M;
int result = time2 - time1;
printf("%d", result < 0 ? -1 : result);
}
'백준 알고리즘 > Lang-C | C++' 카테고리의 다른 글
[백준/C] 10156번 과자 (0) | 2021.08.23 |
---|---|
[백준/C] 10101번 삼각형 외우기 (0) | 2021.08.22 |
[백준/C] 10039번 평균점수 (0) | 2021.08.20 |
[백준/C] 5596번 시험 점수 (0) | 2021.08.19 |
[백준/C] 5575번 타임 카드 (0) | 2021.08.18 |