こんにちは、ナナオです。
前回に引き続き競プロを実施していきたいと思います。
今回の問題は以下です。
【マップの扱い 2】マップの書き換え・縦横 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】
実装
以下のように実装しました。
(解答例のpythonコードをgoに書き換えただけですが…)
package main
import "fmt"
func main(){
var h, w, d int
fmt.Scan(&h, &w, &d)
g := make([][]int, h)
for i := 0; i < h; i++ {
g[i] = make([]int, w)
}
min := func(a, b int) int {
if a > b {
return b
} else {
return a
}
}
c := 1
switch d {
case 1:
for i := 0; i < h; i++ {
for j := 0; j < min(w, i + 1); j++ {
g[i - j][j] = c
c++
}
}
for i := 1; i < w; i++ {
for j := 0; j < min(h, w - i); j++ {
g[h - 1 - j][i + j] = c
c++
}
}
case 2:
for i := 0; i < h; i++ {
for j := 0; j < w; j++ {
ty, tx := i, j
g[ty][tx] = c
c++
}
}
case 3:
for i := 0; i < w; i++ {
for j := 0; j < h; j++ {
ty, tx := j, i
g[ty][tx] = c
c++
}
}
case 4:
for i := 0; i < w; i++ {
for j := 0; j < min(h, i + 1); j++ {
g[j][i - j] = c
c++
}
}
for i := 1; i < h; i++ {
for j := 0; j < min(w, h - i); j++ {
g[i + j][w - 1 - j] = c
c++
}
}
}
for i := 0; i < h; i++ {
for j := 0; j < w; j++ {
fmt.Printf("%d", g[i][j])
if j < w - 1 {
fmt.Print(" ")
}
}
fmt.Println()
}
}
これに関してはなんか複雑で自分でよくわかっていません。。。よくないとはわかりつつも。。。
では今回はこれで👍