0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

リバーシの操作(斜め) Java編 解答

Posted at

ようやくハマりから抜け出せた。
「お手本を写してもなんかうまくいかない……」
「質問を投げてみたけどmaxとminはC++と一緒……? うーん……?」
という感じで迷っていたのだが、

なんてことはない、JavaのString一致判定はequals()メソッドであることを失念していたというオチだった。
==で繋いでも駄目ですよそりゃ。

import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        int h, w, y, x;
        String[][] map;

        Scanner sc = new Scanner(System.in);

        h = sc.nextInt();
        w = sc.nextInt();
        y = sc.nextInt();
        x = sc.nextInt();

        map = new String[h][w];

        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));
            }
        }
        //_____ここまで初期化______

        for(int i=-1; i <= 1; i+=2){
            for(int j=1; ; j++){

                if(x+(i*j) == -1 || x+(i*j) == w || y+(i*j) == -1 || y+(i*j) == h){
                    break;
                }

                if(map[y+(i*j)][x+(i*j)].equals("*")){
                    for(int k = Math.min(y+(i*j), y); k <= Math.max(y+(i*j), y); k++){
                        map[k][k-y+x] = "*";
                    }
                    break;
                }
            }
        }

        for(int i=-1; i <= 1; i+=2){
            for(int j=1; ; j++){

                if(x+(i*j) == -1 || x+(i*j) == w || y-(i*j) == -1 || y-(i*j) == h){
                    break;
                }

                if(map[y-(i*j)][x+(i*j)].equals("*")){
                    for(int k = Math.min(x+(i*j), x); k <= Math.max(x+(i*j), x); k++){
                        map[y+x-k][k] = "*";
                    }
                    break;
                }
            }
        }
        map[y][x] = "*";

        // _____ここから表示_______
        for(int i=0; i<h; i++){
            for(int j=0; j<w; j++){
                System.out.print(map[i][j]);
            }
            System.out.println("");
        }
    }
}

ただ、「囲む処理をどういう基準で算出しているのか」についてはまだ理解出来ていないので、紙に書くなりして整理してみようと思う。
意外とこういうところでアナログって強いのよね。

そこを理解したらやっと次に行ける……。Cランク相当問題とはいったい……。(体調不良のせいってことにしといて)

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?