더 빠른 실행을 위한 입력 검색 최적화
SPOJ 질문에서 발생하는 시간 초과 문제를 해결하려면 더 빠른 입력 검색을 위한 특정 최적화가 필요합니다.
bufio.Scanner for Line 활용 읽기
fmt.Scan만 사용하는 대신 bufio.Scanner를 활용하여 입력 줄을 효율적으로 읽습니다.
속도를 위한 숫자 변환 사용자 정의
숫자 입력만 예상되므로 원시 바이트에서 직접 정수를 추출하기 위해 맞춤 숫자 변환기를 구현할 수 있습니다. 이는 불필요한 문자열 변환 및 오버헤드를 방지하므로 Scanner.Text를 사용할 때보다 성능이 크게 향상됩니다.
사용자 정의 숫자 변환기 구현
toInt 함수는 원시 바이트를 정수를 효율적으로 처리:
func toInt(buf []byte) (n int) { for _, v := range buf { n = n*10 + int(v-'0') } return }
이 함수는 숫자와 UTF-8 인코딩 바이트의 일대일 매핑을 활용합니다. input.
세련된 솔루션
이러한 최적화를 결합한 향상된 솔루션은 다음과 같습니다.
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) }
최적화의 이점
이 최적화된 솔루션은 입력 스캔 속도를 크게 향상시켜 프로그램은 할당된 시간 제한 내에 필요한 입력을 처리할 수 있습니다. bufio.Scanner와 함께 사용자 정의 숫자 변환기는 런타임 오버헤드를 최소화하고 프로그램 효율성을 향상시킵니다.
위 내용은 시간 초과를 방지하기 위해 Go에서 입력 검색을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!