> 백엔드 개발 > Golang > 경쟁 프로그래밍에서 시간 초과를 방지하기 위해 Go에서 입력 검색을 어떻게 최적화할 수 있습니까?

경쟁 프로그래밍에서 시간 초과를 방지하기 위해 Go에서 입력 검색을 어떻게 최적화할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-25 21:56:15
원래의
692명이 탐색했습니다.

How Can We Optimize Input Scanning in Go to Avoid Timeouts in Competitive Programming?

향상된 코드 성능을 위한 더 빠른 입력 검색

제공되는 프로그램은 SPOJ의 코딩 과제를 해결하는 것을 목표로 합니다. 그러나 입력 검색 프로세스로 인해 시간 초과 문제가 발생하는 것 같습니다. 더 빠른 입력 읽기를 위해 bufio를 활용함에도 불구하고 코드에서 여전히 이 문제에 직면합니다.

이 문제를 해결하기 위해 두 가지 최적화 기술을 살펴보겠습니다.

1. bufio.Scanner 활용

라인별 입력 읽기에 fmt.Fscan을 사용하는 대신 bufio.Scanner를 활용할 수 있습니다. 이 접근 방식은 원시 바이트를 문자열로 변환하는 대신 직접 반환하는 Bytes() 메서드를 활용하여 프로세스를 간소화합니다.

2. 사용자 정의 정수 변환 기능

속도를 더욱 향상시키기 위해 bufio.Scanner에서 얻은 원시 바이트에서 정수를 효율적으로 추출하는 특수 변환기 기능 toInt()를 도입할 수 있습니다. 이 함수는 십진수를 나타내는 바이트 시퀀스를 정수로 직접 변환하여 문자열 변환의 오버헤드를 제거합니다.

이러한 최적화를 통합한 업데이트된 코드는 다음과 같습니다.

package main

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

func main() {
    var n, k, c int
    scanner := bufio.NewScanner(os.Stdin)

    scanner.Scan()
    fmt.Sscanf(scanner.Text(), "%d %d", &n, &k)

    for ; n > 0; n-- {
        scanner.Scan()
        if toInt(scanner.Bytes())%k == 0 {
            c++
        }
    }

    fmt.Println(c)
}

func toInt(buf []byte) (n int) {
    for _, v := range buf {
        n = n*10 + int(v-'0')
    }
    return
}
로그인 후 복사

bufio를 결합하여 .Scanner는 사용자 정의 toInt() 함수를 사용하여 입력 읽기 및 변환 효율성을 크게 높입니다. 결과적으로, 이 최적화된 솔루션은 원래 버전보다 훨씬 빠른 성능을 발휘하여 이전에 발생한 시간 초과 문제를 해결할 것으로 예상됩니다.

위 내용은 경쟁 프로그래밍에서 시간 초과를 방지하기 위해 Go에서 입력 검색을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿