← Back to List

2980번: 도로와 신호등 ↗

Solutions

Go
943 B | 943 chars
package main

import (
	"bufio"
	"fmt"
	"os"
)

var writer *bufio.Writer
var reader *bufio.Reader

func Print(a ...interface{}) {
	fmt.Fprintln(writer, a...)
}

func solve() {
	var N, L int

	fmt.Fscanf(reader, "%d %d\n", &N, &L)

	D := make([]int, N+1)
	R := make([]int, N+1)
	G := make([]int, N+1)

	for i := 0; i < N; i++ {
		fmt.Fscanf(reader, "%d %d %d\n", &D[i], &R[i], &G[i])
	}

	// for i := 0; i < N; i++ {
	// 	print(D[i], " ", R[i], " ", G[i], "\n")
	// }

	D[N] = L

	var lastDestinationTime = 0
	var prevPosition = 0
	var currentTime = 0

	for i := 0; i <= N; i++ {
		currentTime += D[i] - prevPosition
		lastDestinationTime = currentTime

		if i == N {
			break
		}

		k := currentTime % (R[i] + G[i])

		if k < R[i] {
			currentTime += R[i] - k
		}

		prevPosition = D[i]
	}

	Print(lastDestinationTime)
}

func main() {
	writer = bufio.NewWriter(os.Stdout)
	reader = bufio.NewReader(os.Stdin)
	defer writer.Flush()

	solve()
}