結果

問題 No.401 数字の渦巻き
ユーザー tsunabittsunabit
提出日時 2019-06-08 00:46:51
言語 Java21
(openjdk 21)
結果
AC  
実行時間 296 ms / 2,000 ms
コード長 3,044 bytes
コンパイル時間 4,033 ms
コンパイル使用メモリ 77,352 KB
実行使用メモリ 48,452 KB
最終ジャッジ日時 2024-04-15 19:28:00
合計ジャッジ時間 11,147 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 146 ms
41,540 KB
testcase_01 AC 149 ms
41,184 KB
testcase_02 AC 151 ms
41,316 KB
testcase_03 AC 157 ms
41,684 KB
testcase_04 AC 161 ms
41,448 KB
testcase_05 AC 161 ms
41,424 KB
testcase_06 AC 160 ms
41,556 KB
testcase_07 AC 166 ms
41,744 KB
testcase_08 AC 172 ms
42,040 KB
testcase_09 AC 170 ms
41,660 KB
testcase_10 AC 180 ms
41,608 KB
testcase_11 AC 193 ms
41,728 KB
testcase_12 AC 195 ms
41,548 KB
testcase_13 AC 204 ms
42,024 KB
testcase_14 AC 209 ms
41,820 KB
testcase_15 AC 206 ms
42,104 KB
testcase_16 AC 215 ms
42,344 KB
testcase_17 AC 220 ms
42,012 KB
testcase_18 AC 221 ms
42,180 KB
testcase_19 AC 223 ms
42,268 KB
testcase_20 AC 222 ms
42,272 KB
testcase_21 AC 236 ms
42,356 KB
testcase_22 AC 245 ms
42,384 KB
testcase_23 AC 233 ms
42,904 KB
testcase_24 AC 235 ms
42,512 KB
testcase_25 AC 252 ms
42,476 KB
testcase_26 AC 246 ms
42,576 KB
testcase_27 AC 248 ms
42,380 KB
testcase_28 AC 255 ms
42,424 KB
testcase_29 AC 296 ms
48,452 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.util.*;
import java.math.*;

public class No401 {
    public static void main(String[] args) {
        // 標準入力から読み込む際に、Scannerオブジェクトを使う。
        Scanner s = new Scanner(System.in);
        // 配列と合わせるため-1する
        int n = s.nextInt() - 1;
//        初期値が0で進めなくなったら+1する変数𝑑を作って、𝑑を4で割った余りが
//        0 ならば右に進む、
//        1 ならば下に進む、
//        2 ならば左に進む、
//        3 ならば上に進む、
//        とすれば渦巻きができます。
        int d = 0;
        int count = 1;
        int gyou = 0, retu = 0;
        int[][] masu = new int[n + 1][n + 1];
        while(count <= (n + 1) * (n + 1)) {
        	// masu[gyou][retu] = count;
        	// 右へ移動
        	if(d % 4 == 0) {
        		masu[gyou][retu] = count;
//        		System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        		retu++;
        		// dの判定
        		if(retu == n) {
        			d++;
        		}else if(retu < n && masu[gyou][retu + 1] != 0) {
        			d++;
        		}
        	// 下へ移動
        	}else if(d % 4 == 1) {
        		masu[gyou][retu] = count;
//        		System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        		gyou++;
        		// dの判定
        		if(gyou == n) {
        			d++;
        		}else if(gyou < n && masu[gyou + 1][retu] != 0) {
        			d++;
        		}
        	// 左へ移動
        	}else if(d % 4 == 2) {
        		masu[gyou][retu] = count;
//        		System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        		retu--;
        		// dの判定	
        		if(retu == 0) {
        			count++;
        			masu[gyou][retu] = count;
//        			System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        			gyou--;
        			d++;
        		}else if(retu > 0 && masu[gyou][retu - 1] != 0) {
        			d++;
        		}
        	// 上へ移動
        	}else if(d % 4 == 3) {
        		// dの判定
        		if(gyou == 0) {
        			count++;
        			masu[gyou][retu] = count;
//        			System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        			d++;
        		}else if(gyou > 0 && masu[gyou - 1][retu] != 0) {
//        			System.out.println("koko");
        			masu[gyou][retu] = count;
//        			System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
        			retu++;
        			d++;
        		}else {
        			masu[gyou][retu] = count;
//            		System.out.println("masu[" + gyou + "][" + retu + "] = " + count);
            		gyou--;
        		}
        	}
        	count++;
        }
        
        // 出力
        for(int[] v : masu) {
        	for(int vv : v) {
//        		System.out.print(vv + " ");
        		System.out.printf("%03d ",vv);
//        		System.out.print(" ");
//        		System.out.printf("[%05d]",123);
        	}
        	System.out.println();
        }
    }
}
0