LoginSignup
0
0

More than 3 years have passed since last update.

【paiza Aランクレベルアップメニュー】 陣取りの手間 Java編

Posted at

paiza Aランクレベルアップメニュー
https://paiza.jp/works/mondai/a_rank_level_up_problems/problem_index?language_uid=java

Javaで挑戦中。22問目で詰まっている。
https://paiza.jp/works/mondai/a_rank_level_up_problems/a_rank_camp_step5
うまく?マークが記載されないのだが、毎回打ち直してエネルギー使ってるのが最高に非効率だと気が付く。
「さあここから処理を考えるぞ」というタイミングで疲れ切っていてヒントを呑み込めないのはどうかと……

・毎度コードを書き直すのが大変
・せっかくアカウント持ってるんだからQiita使え
・問題集は解答を外部に記載しても良い
 ということなので、まずは21問目の回答を備忘録として置いておく。
https://paiza.jp/works/mondai/a_rank_level_up_problems/a_rank_camp_step4

Main.java
import java.util.*;
import java.util.Queue;
import java.util.ArrayDeque;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int h = sc.nextInt();
        int w = sc.nextInt();
        String map[][] = new String[h][w];  //陣

        Queue<XY> q = new ArrayDeque<>();   //キュー

        for(int i=0; i<h; i++){ //初期化
            String temp = sc.next();
            for(int j=0; j<w; j++){
                map[i][j] = String.valueOf(temp.charAt(j));
                if(map[i][j].equals("*")){
                    map[i][j] = "0";    //最初は0に書き換える
                    q.add(new XY(i, j, 1)); //スタート地点(初期値のy, x, 1が入っている)
                }
            }
        }

        while(q.size() > 0){
            XY xy = q.poll();
            int y = xy.y;
            int x = xy.x;
            int d = xy.d;

            if(y > 0 && map[y-1][x].equals(".")){   //上
                map[y-1][x] = String.valueOf(d);
                q.add(new XY(y-1, x, d+1));
            }
            if(y < h-1 && map[y+1][x].equals(".")){   //下
                map[y+1][x] = String.valueOf(d);
                q.add(new XY(y+1, x, d+1));
            }
            if(x < w-1 && map[y][x+1].equals(".")){   //右
                map[y][x+1] = String.valueOf(d);
                q.add(new XY(y, x+1, d+1));
            }
            if(x > 0 && map[y][x-1].equals(".")){   //上
                map[y][x-1] = String.valueOf(d);
                q.add(new XY(y, x-1, d+1));
            }
        }

        for(int i=0; i<h; i++){ //出力
            for(int j=0; j<w; j++){
                System.out.print(map[i][j]);
            }
            System.out.println("");
        }
    }
}

class XY{
    int y;
    int x;
    int d;

    XY(int y, int x, int d){
        this.y = y;
        this.x = x;
        this.d = d;
    }
}

参考:
https://qiita.com/aja_min/items/fed640d6835eb343eedf
https://jpliterature.hatenablog.com/entry/java-breadth-first-search-1

「あ、そうか。クラスを作れば三次配列めいたことができるのか……」
「お前は大学やオンラインスクールで何をやっとったんじゃ」

 使わないと忘れるということですね。いやはや。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0