향상된 코드 성능을 위한 더 빠른 입력 검색
제공되는 프로그램은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!