시간 간격
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 62번째.
Go에서 시간을 다룰 때, "5분"이나 "2시간"과 같이 시간의 간격을 표현해야 할 때가 종종 있습니다. Go는 이 목적을 위해 특별히 time.Duration 타입을 제공합니다.
time.Duration은 두 순간 사이의 시간 간격을 나타냅니다. Go에는 기간(duration)을 간단하고 읽기 쉽게 생성할 수 있도록 미리 정의된 여러 상수가 포함되어 있습니다:
tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.Second가장 흔히 사용되는 시간 간격 상수는 time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute, 그리고 time.Hour입니다. 필요한 정확한 시간 간격을 만들기 위해 이 상수들에 정수를 곱할 수 있습니다.
Duration 값은 시간 산술, 스케줄링 작업 및 프로그램의 타이밍 제어에 필수적입니다. 이러한 값은 다른 시간 함수와 원활하게 작동하며 코드에서 시간 간격을 표현하는 명확하고 읽기 쉬운 방법을 제공합니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움다양한 운동 간격과 휴식 시간을 추적하기 위해 time.Duration을 사용하는 운동 세션 타이머를 만드세요. 이 챌린지는 Go의 사전 정의된 상수를 사용하여 기간(duration) 값을 생성하고 이를 사용하여 계산을 수행하는 능력을 테스트합니다.
두 개의 입력을 받게 됩니다:
"exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit"형식의 운동 정의를 포함하는 문자열 (예:"Push-ups:30:Second,Plank:2:Minute,Squats:45:Second")"rest_duration_value:rest_duration_unit"형식의 휴식 시간 정보를 포함하는 문자열 (예:"15:Second")
당신의 과제는 다음과 같습니다:
- 첫 번째 입력을 쉼표로 분할하여 개별 운동 항목을 가져오도록 파싱합니다.
- 각 운동 항목에 대해 콜론을 기준으로 분할하여 운동 이름, 기간 값(문자열), 기간 단위를 추출합니다.
- 두 번째 입력을 콜론으로 분할하여 휴식 기간 값과 단위를 가져오도록 파싱합니다.
- 기간 값을 문자열에서 정수로 변환하고 적절한 상수를 사용하여
time.Duration객체를 생성합니다:"Second"의 경우:time.Second를 곱합니다."Minute"의 경우:time.Minute를 곱합니다."Hour"의 경우:time.Hour를 곱합니다.
- 애플리케이션 헤더를 표시합니다:
"=== WORKOUT SESSION TIMER ===" - 세션 설정을 표시합니다:
"Setting up workout session..." - 각 운동에 대해 다음을 표시합니다:
"Exercise: [exercise_name] - Duration: [duration_object]" - 휴식 시간을 표시합니다:
"Rest period between exercises: [rest_duration_object]" - 세션 내역을 계산하고 표시합니다:
"=== SESSION BREAKDOWN ==="- 각 운동에 대해:
"[exercise_name]: [duration_in_seconds] seconds" "Rest periods: [rest_duration_in_seconds] seconds each"
- 총 세션 시간을 계산합니다 (모든 운동 시간의 합계와 운동 사이의 휴식 시간 합계):
"=== TIMING CALCULATIONS ===""Total exercise time: [total_exercise_duration_object]""Total rest time: [total_rest_duration_object]"(운동 사이의 휴식 시간이므로 운동 수보다 하나 적음)"Complete session duration: [total_session_duration_object]"
- 세션 통계를 표시합니다:
"=== SESSION STATISTICS ===""Number of exercises: [number_of_exercises]""Longest exercise: [longest_exercise_name] ([longest_duration_object])""Shortest exercise: [shortest_exercise_name] ([shortest_duration_object])""Average exercise duration: [average_duration_in_seconds] seconds"
- 시간 변환을 표시합니다:
"=== TIME CONVERSIONS ===""Session duration in minutes: [total_minutes]"(총 세션 기간을 분 단위로 변환)"Session duration in hours: [total_hours]"(총 세션 기간을 시간 단위로 변환, 소수점으로 표시)
- 완료 메시지를 표시합니다:
"Workout session timer configured successfully"
기간 작업을 위해 time 패키지를, 입력 문자열을 분할하기 위해 strings 패키지를, 문자열 숫자를 정수로 변환하기 위해 strconv 패키지를, 그리고 형식화된 출력을 위해 fmt 패키지를 사용하세요. time.Duration 값은 서로 더할 수 있으며 Seconds(), Minutes(), Hours()와 같은 메서드를 사용하여 다른 단위로 변환할 수 있음을 기억하세요. 이 챌린지는 타이밍 애플리케이션을 위해 기간 값을 생성하고 조작하는 방법을 보여줍니다.
치트 시트
Go는 두 순간 사이의 시간 간격을 나타내기 위해 time.Duration 타입을 제공합니다.
사전 정의된 상수에 정수를 곱하여 기간(duration)을 생성합니다:
tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.Second일반적인 기간 상수들은 다음과 같습니다:
time.Nanosecondtime.Microsecondtime.Millisecondtime.Secondtime.Minutetime.Hour
기간 값들은 서로 더할 수 있으며, Seconds(), Minutes(), Hours()와 같은 메서드를 사용하여 다른 단위로 변환할 수 있습니다.
직접 해보기
package main
import (
"fmt"
"strconv"
"strings"
"time"
)
func main() {
// 입력 읽기
var exerciseInput string
var restInput string
fmt.Scanln(&exerciseInput)
fmt.Scanln(&restInput)
// 입력에서 운동 항목 파싱
exerciseEntries := strings.Split(exerciseInput, ",")
// 입력에서 휴식 시간 파싱
restParts := strings.Split(restInput, ":")
// TODO: 아래에 코드를 작성하세요
// 1. 각 운동 항목을 파싱하여 이름, 시간 값, 단위를 추출합니다
// 2. 시간 값을 정수로 변환하고 time.Duration 객체를 생성합니다
// 3. 휴식 시간을 파싱하고 time.Duration 객체를 생성합니다
// 4. 운동 세션 정보 및 계산 결과를 표시합니다
// 5. 세션 통계 및 시간 변환을 계산합니다
// 챌린지에서 명시된 모든 필수 정보를 출력해야 함을 기억하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.