백준 1408 - 24

1 minute read

문제링크

문제 접근

  • 시간 계산 문제가 처음엔 다소 까다롭게 느껴질 수 있지만, 익숙해지면 정말 간단한 계산 문제라는 것을 알 수 있다. 이번 문제의 경우 정수와 문자열 처리를 함께 하도록 유도하면서 난이도를 살짝 높인 것 같다.

의사코드(pseudo-code)

# define data type
- typedef struct time
	- int hour
	- int min
	- int sec

# define function
void printTime(time t)
	- string hh = to_string(t.hour)
	- string mm = to_string(t.min)
	- string ss = to_string(t.sec)
	- hh = hh.length()==1 ? '0' + hh : hh
	- mm = mm.length()==1 ? '0' + mm : mm
	- ss = ss.length()==1 ? '0' + ss : ss
	- cout << hh << ":" << mm << ":" << ss << "\n"

#main
- time now, start, remain
- scanf("%d:%d:%d", &now.hour, &now.min, &now.sec)
- scanf("%d:%d:%d", &start.hour, &start.min, &start.sec)
- remain.sec = start.sec - now.sec
- if remain.sec < 0 then:
	- remain.sec += 60
	- start.min -= 1
- remain.min = start.min - now.min
- if remain.min < 0 then:
	- remain.min += 60
	- start.hour -= 1
- remain.hour = start.hour - now.hour
- if remain.hour < 0 then:
	- remain.hour += 24
- printTime(remain)

소스코드 및 분석

전체 코드

#include <iostream>
#include <string>
using namespace std;

typedef struct time {
	int hour;
	int min;
	int sec;
};

void printTime(time t) {
	string hh = to_string(t.hour);
	string mm = to_string(t.min);
	string ss = to_string(t.sec);
	hh = hh.length() == 1 ? '0' + hh : hh;
	mm = mm.length() == 1 ? '0' + mm : mm;
	ss = ss.length() == 1 ? '0' + ss : ss;
	cout << hh << ":" << mm << ":" << ss << "\n";
}

int main()
{
	time now, start, remain;
	scanf("%d:%d:%d", &now.hour, &now.min, &now.sec);
	scanf("%d:%d:%d", &start.hour, &start.min, &start.sec);

	remain.sec = start.sec - now.sec;
	if (remain.sec < 0) {
		remain.sec += 60;
		start.min--;
	}

	remain.min = start.min - now.min;
	if (remain.min < 0) {
		remain.min += 60;
		start.hour -= 1;
	}

	remain.hour = start.hour - now.hour;
	if (remain.hour < 0)
		remain.hour += 24;

	printTime(remain);
}
  • data type 은 구조체를 이용하여 시,분,초 를 모두 담을 수 있는 형태이다. -scanf 함수를 호출하여 콜론(:)을 구분문자로 설정하였다. 따라서 시, 분, 초 모두 정수로 처리할 수 있다.
  • printTime 함수를 정의하여 문제에서 요구하는 출력형식을 맞춰주었다. string 객체는 ‘+’ 연산을 통해 문자열을 앞뒤로 붙일 수 있다.
  • main 함수에서 남은 시간을 계산한다.

Leave a comment