Goの勉強がてら、atcoderで一度pythonで解いた問題をGoで解き直しています。
下記の問題を解いていたところ、ロジックは同じにも関わらず、なぜかGoだといくつかのテストケースでWAがでてしまい、思い当たる改善部分がなく途方にくれています。
(問題に正解したいのではなく、同じロジックなのになぜGoの方は通らないのか理解したいです)
C - Build Stairs
https://atcoder.jp/contests/abc136/tasks/abc136_c
go
1package main 2 3import ( 4"bufio" 5"fmt" 6"math/big" 7"os" 8"strconv" 9"strings" 10) 11 12var sc = bufio.NewScanner(os.Stdin) 13var out = bufio.NewWriter(os.Stdout) 14 15func nextLine() string { 16 sc.Scan() 17 return sc.Text() 18} 19 20func nextInt() uint64 { 21 sc.Scan() 22 i, e := strconv.ParseUint(sc.Text(), 10, 64) 23 if e != nil { 24 panic(e) 25 } 26 return i 27} 28 29func uint64Array(arr []string) (newArr []uint64) { 30 for i, _ := range arr { 31 n, _ := strconv.ParseUint(arr[i], 10, 64) 32 newArr = append(newArr, n) 33 } 34 return 35} 36 37func main() { 38 _ = int(nextInt()) 39 L := uint64Array(strings.Split(nextLine(), " ")) 40 41 for i := len(L)-1; i > 0; i-- { 42 if L[i-1] > L[i] { 43 if L[i-1] -= 1; L[i-1] > L[i] { 44 fmt.Println("No") 45 os.Exit(0) 46 } 47 } 48 } 49 50 fmt.Println("Yes") 51} 52
このpythonのcodeでは無事ACになります。
python
1import sys 2sys.setrecursionlimit(20000000) 3input = sys.stdin.readline 4 5def main(): 6 n = int(input()) 7 nums = list(map(int, input().split())) 8 9 for x in reversed(range(1, len(nums))): 10 if nums[x-1] > nums[x]: 11 nums[x-1] -= 1 12 13 if nums[x-1] > nums[x]: 14 print('No') 15 sys.exit() 16 17 print('Yes') 18 19 20if __name__ == '__main__': 21 main()
まだGoに関して理解できていない挙動があるのではないかとモヤモヤしています。
わかる方よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/17 06:52