바로가기
문제
https://www.acmicpc.net/problem/2525
2525번: 오븐 시계
첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)
www.acmicpc.net
문제 요약
요리 시작 시간(시, 분)과 요리하는데 걸리는 시간을 입력 받고 요리 완료 시간을 구하는 문제이다.
입력값
1. 요리 시작 시간(시 분)을 빈칸을 두고 입력
2. 요리하는데 걸리는 시간
출력값
요리 완료 시간(시 분)
예상 문제점
- 시(hour)가 24 이상일 때 어떻게 할 것인가?
- 분이 60 이상일 때 어떻게 할 것인가?
순서도
1. 시작 시각 입력 (시 분)
2. 요리하는 데 필요한 시간 입력(분)
3. 시작 시간에 요리 시간 더하기
4. 시간과 분이 정상 범위 이상이라면 최대치만큼 빼주기
자바
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
// 현재 시각 입력 받기
String timeStr = reader.readLine();
String[] timeStrArr = TimeStr.split(" ");
// String으로 받은 문자열을 int형 문자열로 변환하기
int[] timeArr = new int[timeStrArr.length];
for (int i=0; i<timeArr.length; i++) {
timeArr[i] = Integer.parseInt(timeStrArr[i]);
}
// 요리 시간 입력 받기
String cookTimeStr = reader.readLine();
int cookTime = Integer.parseInt(cookTimeStr);
// 요리 완료 시간 계산하기
timeArr[0] += cookTime/60;
timeArr[1] += cookTime%60;
// 분이 60이상인지 확인
if (timeArr[1] >= 60) {
timeArr[0] += 1;
timeArr[1] -= 60;
}
// 시간이 24이상인지 확인
if (timeArr[0] >= 24) {
timeArr[0] -= 24;
}
System.out.println(timeArr[0] + " " + timeArr[1]);
} catch (IOException e) {
e.printStackTrace();
}
}
}
입력 받은 문자열(timeStr)을 int형 배열로 바로 넣어보려 했으나 Integer.ParseInt()는 배열에서는 사용이 불가능해 조금 복잡하게 변환하였습니다.
물론 scanner로 입력 받는다면 바로 int형으로 받으면 되기에 더 간단하게 처리할 수 있습니다.
파이썬
# 시작 시간 입력 받기
startHour, startMin = map(int, input().split()) # map을 사용해 바로 변수 2개에 저장
# 요리하는데 걸리는 시간 입력 받기
cookTime = int(input())
# 요리 완료 시간 구하기
startHour += cookTime // 60
startMin += cookTime % 60
# 요리 완료 시간 중 분이 60 이상인 경우
if (startMin >= 60):
startMin -= 60
startHour += 1
# 시(hour)가 24 이상인 경우
if (startHour >= 24):
startHour -= 24
print("{} {}".format(startHour, startMin))
map 함수는 여러 개의 데이터를 한 번에 변환할 때 사용하는 내장 함수이다. 두 인자를 받는데, 첫 번째 인자는 함수로 int를 사용해 정수로 변환했다. 두 번째 인자인 input_str.split()은 문자를 입력 받고 공백 기준으로 분리한다는 뜻이다.
print할 때 .format을 사용한 이유는 변수를 한 번에 출력하면서 공백을 중간에 넣어야 하기에 사용했다. 출력도 만족하면서 사람이 보기에도 깔끔해 보이는 장점이 있다.
C#
namespace Baekjoon
{
internal class Program
{
static void Main(string[] args)
{
// 시작 시간 입력 받기
string startTime = Console.ReadLine();
string[] startTimeStrArray = startTime.Split(' ');
int[] startTimeArr = Array.ConvertAll(startTimeStrArray, int.Parse);
// 요리 시간 입력 받기
int cookTime = int.Parse(Console.ReadLine());
// 시작 시간에 요리 시간 더하기
startTimeArr[0] += cookTime/60; // 시
startTimeArr[1] += cookTime%60; // 분
// 분이 60 이상인 경우
if (startTimeArr[1] >= 60)
{
startTimeArr[1] -= 60;
startTimeArr[0] += 1;
}
// 시(hour)가 24 이상인 경우
if (startTimeArr[0] >= 24)
{
startTimeArr[0] -= 24;
}
Console.WriteLine(startTimeArr[0] + " " + startTimeArr[1]);
}
}
}
'백준코딩 > 브론즈' 카테고리의 다른 글
백준 4344번(평균은 넘겠지) - Java, Python, C# (4) | 2023.12.05 |
---|---|
백준 8958번(OX퀴즈) - Java, Python, C# (0) | 2023.12.01 |
백준 1152번(단어의 개수) - Java, Python, C# (2) | 2023.11.23 |
백준 2562번(최댓값) - Java, Python, C# (0) | 2023.11.07 |
백준 2588번(곱셈) - Java, Python, C# (0) | 2023.10.30 |