티스토리 뷰

메모

golang 입출력 빠르게

4567은 소수 2022. 2. 15. 01:16

 

간단하게 golang 입출력 빠르게 하는 법

(백준 문제로 golang 연습하다가 시간초과 나와서 fmt 개 느린거 알게됨)

 

예시 문제 : 백준 1850

(그냥 이거 풀다 시간초과 나서 이걸로 올림)

(간단한 알고리즘 설명 : 어짜피 1로만 이루어진 수 => 최대 공약수 그냥 구해서 그 수만큼 1 출력하면 됨, 

ex) 111, 1111111은 1이 3개, 6개 => gcd(3,6)=3 => 정답 111)

https://www.acmicpc.net/problem/1850 

 

1850번: 최대공약수

모든 자리가 1로만 이루어져있는 두 자연수 A와 B가 주어진다. 이때, A와 B의 최대 공약수를 구하는 프로그램을 작성하시오. 예를 들어, A가 111이고, B가 1111인 경우에 A와 B의 최대공약수는 1이고, A

www.acmicpc.net

 

방법 : bufio, os를 쓰자

 

bufio로 reader와 writer를 각각 stdin, stdout 으로 설정 후

Fscanf, Fscanln, Fprintf, Fprintln 등을 형식에 맞게 쓰자 (첫 번째 파라미터로 reader, writer 버퍼 지정)

 

마지막에 writer.Flush() 해주기

package main

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

func gcd(a int64, b int64) int64 {
	var result int64 = 0

	if a < b {
		a, b = b, a
	}

	var q int64 = a
	var r int64 = b

	for {
		if r == 0 {
			result = a
			break
		}
		q = a / b
		r = a - (q * b)
		a, b = b, r
	}

	return result
}

func main() {
	var a int64 = 0
	var b int64 = 0

	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)

	fmt.Fscanf(reader, "%d %d", &a, &b)
	//fmt.Fscanln(reader, &a, &b)

	var result = gcd(a, b)

	for i := 0; i < int(result); i++ {
		fmt.Fprintf(writer, "1")
	}
	writer.Flush()
}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함