コード基礎100題


実装がうまくいかなかったため,100問のコード更新の基礎を解くことにした.
よく使われない混同された概念についてコメントする.
1069:[基本条件/実行構造の選択]異なる評価を入力して出力します(説明)
この問題はif文で実現できるが,if文の条件式結果は真と偽の2種類しかなく,状況が多ければコードが長くなり,処理時間も長くなるという欠点がある.参照に示すように、個人がif文をよく使用するため、switch文の制約条件が混同されるため、switch-case文で実装され、解きます.
switch文は1つの条件式で、多くの場合の数を処理することができ、コードが簡潔であるという利点があります.ただし、switch文の条件式の結果は整数、文字、文字列でなければならないという制約があります.また、条件式の結果一致する値はcase文に移動し、case文の値は整数定数のみであるため、変数や実数を書き込むことができず、繰り返すことができません.(JDK 1.7以降で文字列を使用可能)
ソースコード
import java.util.Scanner;

// 평가 입력받아 다르게 출력
public class c1069 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char c = sc.next().charAt(0);
        switch (c) { // 조건식의 결과는 정수, 문자, 문자열만 가능
            case 'A': // 정수 상수, 문자열 가능
                System.out.println("best!!!");
                break;
            case 'B':
                System.out.println("good!!");
                break;
            case 'C':
                System.out.println("run!");
                break;
            case 'D':
                System.out.println("slowly");
                break;
            default: // case를 제외한 나머지 모든 경우에 실행
                System.out.println("what?");
        }
    }
}
1082:[基礎-総合]十六進法gugudan?
これは16進数で入力し、16進数で出力する問題です.値を他のフォーマットに出力する場合は、フォーマット出力printf()メソッドを使用します.
ScannerのnextInt()メソッドのパラメータ受信基数を使用して、パラメータ受信の進数に変換できます.(問題を解くときに初めて知った)printf()に%xというインジケータを指定し、16進数整数で出力すればよい.
println()とprintf()に性能差があるかどうか知りたいので探してみましたが、関連記事はなく、性能に差はないようです.出力値はprintln()、出力はprintf()を使用します.
ソースコード
import java.util.Scanner;

// 16진수 구구단?
public class c1082 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(16); // 16진수로 입력받음
        for (int i = 1; i < 16; i++) {
            System.out.printf("%X*%X=%X%n", n, i, n * i); // %x : 16진 정수의 형식으로 출력
        }
    }
}
1097:[基本-2 D配列]反転駒十字(説明)
クロスをひっくり返すのはいったい何ですか.たった30分で問題を理解した.ははは、他のブログ記事を見ても説明がなかったのでYouTubeを見てすぐに納得.
この問題は,座標で指定された横番と縦番の駒を白->剣/剣->白に置き換える問題である.
2 D配列長さ19*19、座標-1を宣言し、横線と縦線の駒の色を変更します.このとき,横線の駒は白から黒(1−>0)に変わり,横線の駒は再び変化する.(0 -> 1)
ソースコード
import java.util.Scanner;

// 바둑알 십자 뒤집기
public class c1097 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[][] board = new int[19][19];
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board.length; j++) {
                board[i][j] = sc.nextInt(); // 바둑판
            }
        }
        int n = sc.nextInt(); // 뒤집기 횟수
        for (int i = 0; i < n; i++) {
            // 뒤집기 좌표
            int x = sc.nextInt() - 1;
            int y = sc.nextInt() - 1;
            for (int j = 0; j < board.length; j++) {
                if (board[x][j] == 0) { // 가로
                    board[x][j] = 1;
                } else {
                    board[x][j] = 0;
                }
            }
            for (int j = 0; j < board.length; j++) {
                if (board[j][y] == 0) { // 세로
                    board[j][y] = 1;
                } else {
                    board[j][y] = 0;
                }
            }
        }
        for (int[] bb : board) {
            for (int b : bb) {
                System.out.printf("%d ", b);
            }
            System.out.println();
        }

    }
}