こんにちは、ナナオです。

前回に引き続き競プロを実施していきたいと思います。

今回の問題は以下です。

盤面の情報変更 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】

問題

前回の問題で、盤面の変更を伴う場合の実装をしろというものですね。

入力は以下の通りです。

H W N   
S_0       
...     
S_(H-1)     
y_1 x_1     
...     
y_N x_N

私の実装は以下の通りです。

package main
import (
    "fmt"
    "bufio"
    "os"
    "strings"
)

func main(){
    var h, w, n int
    fmt.Scan(&h, &w, &n)
    sc := bufio.NewScanner(os.Stdin)
    
    s := make([][]string, h)
    for i := 0; i < h; i++ {
        sc.Scan()
        s[i] = strings.Split(sc.Text(), "")
    }
    
    for i := 0; i < n; i++ {
        var x, y int
        fmt.Scan(&x, &y)
        s[y][x] = "#"
    }
    
    for i := 0; i < h; i++ {
        fmt.Println(strings.Join(s[i], ""))
    }
}

これだとx, yの読み込みに失敗してしまうのと、入力はy_n x_nで入力されるので修正しました。

これにすることでだいぶコードがすっきりしましたね。

package main
import (
    "fmt"
    "strings"
)

func main(){
    var h, w, n int
    fmt.Scan(&h, &w, &n)

    s := make([][]string, h)
	for i := 0; i < h; i++ {
		var line string
		fmt.Scan(&line)
		s[i] = strings.Split(line, "")
	}
    
    for i := 0; i < n; i++ {
        var x, y int
        fmt.Scan(&y, &x)
        s[y][x] = "#"
    }

    for i := 0; i < h; i++ {
        fmt.Println(strings.Join(s[i], ""))
    }
}

テストケースもこれで全部通りました。

よかったよかった。