Menu
Coddy logo textTech

요약 - 간단한 타이머

Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 65번째.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

challenge icon

챌린지

쉬움

time.NewTicker를 사용하여 지정된 기간부터 0까지 카운트다운하고, 정기적인 간격으로 진행 메시지를 표시하는 카운트다운 타이머 애플리케이션을 만드세요. 이 챌린지는 티커(ticker), 루프 및 기간 계산을 결합하여 기능적인 타이밍 애플리케이션을 만드는 능력을 테스트합니다.

두 개의 입력을 받게 됩니다:

  • "value:unit" 형식의 카운트다운 기간을 포함하는 문자열 (예: "10:Second" 또는 "3:Minute")
  • "value:unit" 형식의 업데이트 간격을 포함하는 문자열 (예: "1:Second")

여러분의 과제는 다음과 같습니다:

  1. 콜론을 기준으로 첫 번째 입력을 분할하여 카운트다운 기간 값과 단위를 추출합니다.
  2. 콜론을 기준으로 두 번째 입력을 분할하여 업데이트 간격 값과 단위를 추출합니다.
  3. strconv 패키지를 사용하여 문자열 값을 정수로 변환합니다.
  4. 적절한 상수를 사용하여 카운트다운 기간과 업데이트 간격 모두에 대한 time.Duration 객체를 생성합니다:
    • "Second"의 경우: time.Second를 곱합니다.
    • "Minute"의 경우: time.Minute를 곱합니다.
    • "Hour"의 경우: time.Hour를 곱합니다.
  5. 타이머 헤더를 표시합니다: "=== COUNTDOWN TIMER ==="
  6. 타이머 설정을 표시합니다: "Starting countdown from [countdown_duration_object]"
  7. 업데이트 빈도를 표시합니다: "Updates every [update_interval_object]"
  8. 업데이트 간격 기간을 사용하여 time.NewTicker로 티커를 생성합니다.
  9. 카운트다운 기간으로 남은 시간 변수를 초기화합니다.
  10. 루프를 사용하여 카운트다운을 수행합니다:
    • <-ticker.C를 사용하여 각 티커 이벤트를 기다립니다.
    • 남은 시간에서 업데이트 간격을 뺍니다.
    • 남은 시간이 0보다 크면 다음을 표시합니다: "Time remaining: [remaining_time_object]"
    • 남은 시간이 0 이하이면 "Time's up!"을 표시하고 루프를 종료합니다.
  11. ticker.Stop()을 사용하여 티커를 중지합니다.
  12. 완료 통계를 표시합니다:
    • "=== TIMER COMPLETE ==="
    • "Original duration: [countdown_duration_object]"
    • "Update interval: [update_interval_object]"
    • "Total updates displayed: [number_of_updates]" (남은 시간이 표시된 횟수를 계산합니다)
  13. 완료 메시지를 표시합니다: "Countdown timer finished successfully"

티커 및 기간 작업에는 time 패키지를, 입력 문자열 분할에는 strings 패키지를, 문자열을 정수로 변환하는 데는 strconv 패키지를, 출력에는 fmt 패키지를 사용하세요. time.NewTicker는 정기적인 간격으로 채널에 값을 보내는 티커를 반환하며, 리소스를 해제하기 위해 작업이 끝나면 ticker.Stop()을 호출해야 함을 기억하세요. 이 챌린지는 Go의 타이밍 메커니즘을 사용하여 실용적인 카운트다운 타이머를 만드는 방법을 보여줍니다.

직접 해보기

package main

import (
	"fmt"
	"strconv"
	"strings"
	"time"
)

func main() {
	// 입력 읽기
	var countdownInput string
	var intervalInput string
	fmt.Scanln(&countdownInput)
	fmt.Scanln(&intervalInput)
	
	// 카운트다운 지속 시간 입력 파싱
	countdownParts := strings.Split(countdownInput, ":")
	countdownValue, _ := strconv.Atoi(countdownParts[0])
	countdownUnit := countdownParts[1]
	
	// 업데이트 간격 입력 파싱
	intervalParts := strings.Split(intervalInput, ":")
	intervalValue, _ := strconv.Atoi(intervalParts[0])
	intervalUnit := intervalParts[1]
	
	// TODO: 아래에 코드를 작성하세요
	// switch 문을 사용하여 time.Duration 객체로 변환하세요
	// 카운트다운 타이머 생성 (테스트를 위해 실제 지연 없이 시뮬레이션)
	// 카운트다운 루프 구현
	// 모든 필수 메시지 및 통계 표시
	// 참고: 테스트 목적으로 실제 시간 지연 없이 티커 동작을 시뮬레이션하세요
	
}

로직 & 흐름의 모든 레슨