728x90
728x90
Golang으로 백준을 할 때는 제약이 많다. 어레이리스트나 트리셋같이 ps에서 자주 사용되는 자료구조도 존재하지 않아 애를 먹는다.
그럼에도 불구하고 실행 속도가 백준에서 지원하는 언어 중에선 상위권이라 언어를 공부 중이거나 자료구조를 그리 중요하게 사용하지 않는 문제에 써먹어볼 수 있다.
물론 golang도 표준 입출력은 오버헤드가 있기 때문에 더 빠르게 받는 방법을 알아둘 필요가 있다.
그 방법이 bufio 모듈과 Fscan/Fprint 메서드를 사용하는 것이다.
fmt 모듈에서 Fscan과 Fprint(ln) 메서드를 지원하는데 이는 표준 입출력이 아닌 입출력 버퍼를 지정할 수 있고 속도도 Scan/Print보다 월등히 빠르다.
bufio.Writer와 bufio.Reader로 표준 입출력을 받도록 해주면 빠른 입출력을 할 수 있다. 참고로 이 모듈을 사용하면 출력이 버퍼에 저장되므로 프로그램이 끝나기 전 writer.Flush()를 호출하여 모두 출력할 수 있도록 해야 한다.
아래 코드는 3733번을 go 언어로 푸는 코드이다. 해당 코드에서 입력의 끝을 처리하는 방법을 확인할 수 있다.
package main
import (
"bufio"
"fmt"
"os"
)
var writer *bufio.Writer
var reader *bufio.Reader
func solve() {
var n int
var s int
var ans int
_, err := fmt.Fscan(reader, &n)
for err == nil {
fmt.Fscan(reader, &s)
ans = s / (n + 1)
fmt.Fprintln(writer, ans)
_, err = fmt.Fscan(reader, &n)
}
}
func main() {
writer = bufio.NewWriter(os.Stdout)
reader = bufio.NewReader(os.Stdin)
defer writer.Flush()
solve()
}
728x90
728x90
'Golang' 카테고리의 다른 글
Golang으로 postgreSQL 연동 (0) | 2024.11.04 |
---|