[白俊アルゴリズム]段階的に問題Lvに答える.四時門


白峻10952号です。


A+Bをwhile文で出力


これは2つの入力値を出力する問題であり、問題とは異なり、最初の入力値はテストケースの数を決定できません.すなわち,for文は回転時に必要な範囲制限値がないため,正確なカウントがなければwhile文を用いる.
while文条件文がfalseの瞬間、while文は終了します.
そこで、次のコードを作成しました.結果はエラーでした.
import java.util.*;

public class Q10952 {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        
        int result = 1;
        //result = 1 (result 초기값은 1로 설정)
        //첫번째 입력: result = 1, num1 = 1, num2 = 1   
        //두번째 입력: result = 2, num1 = 2, num2 = 3
        //세번째 입력: result = 5, num1 = 0, num2 = 0
        // -> 세번째 입력의 경우 0과 0의 입력이 들어오는 순간 while문에 들어가지 않고 while문을 빠져나와야 하는데, 두번째 입력의 result값이 5로 저장되어 있기 때문에 while문을 들어간 후 그 다음 네번째 입력 전에 while문을 빠져나온다.
        
        while(result != 0){
        	//1
            //2
            int num1 = scan.nextInt();
            //1
            //3
            int num2 = scan.nextInt();
            
            //2
            //5
            result = num1 + num2;
            System.out.println(result);
        }
        
    }
}
これは、上記のコードに従って処理すると、出力結果が最後の0になるまで出力値が0になるからである.
ただし、0の場合は出力せず、whileゲートを離れるので調整が必要です.
public class Q10952 {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        
        int result = 1;
        
        
        while(result != 0){
            int num1 = scan.nextInt();
            int num2 = scan.nextInt();

            result = num1 + num2;
            if(result != 0){
            //더한값이 0일때는 출력하지 않도록 조건 하나를 더 걸어준다.
                System.out.println(result);
            }
        }
        
    }
}
最後に、出力例と同じ条件を追加しました.問題に合格したものの、気分が悪いのは….このように、条件が次から次へと符号化されていると、あまり良くないようで、whileゲート内でしか解決できない方法があるかどうかをもう一度考えるべきです.

白峻10951号です。


A+B出力


入力の最後が確定していない場合、スキャナの入力を受け入れ、より多くの値を出力します.

次の値を入力値として使用します.以前のプラス記号出力の問題とは異なり、入力値がいつ終わるか分からない.ファイルからデータを取得できない場合、EOFはそれを利用することができます.終了点を明確にするのが難しい場合に必要です.
public class Main {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        //결과값 초기화
        int sum = 1;
        
        //hasNext() 함수는 scanner가 입력값을 읽어올 때, 다음으로 불러올 data가 있는지를 따져본다.
        //다음에도 값이 있다면 
        while(scan.hasNext()){
        	//반복해서 다 더한 값을 출력해냄
            
            int a = scan.nextInt();
            int b = scan.nextInt();
            sum = a+b;
            System.out.println(sum);
        }
    }
}
スキャナを使用して入力値を受信した場合、hasNext()関数を使用して次の文字列を確認できます.次に入力値がある場合、hasNext()はtrue値になり、while文を迂回します.

白俊1110号。


プラスサイクル


import java.util.*;
public class Q1110 {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);

        int originNum = scan.nextInt();
        

        int newNum = originNum;
        int count = 0;
        //String mixedNumString = "";
        //int mixedNumInt = 0;
        
        //while문 조건을 true 말고 직접 조절하려고,
        //while(mixedNumInt != originNum)으로 했는데 백준에서는 계속 틀렸다고 나온다
        //디버깅 결과는 동일하게 나옴
        
        
        while(true){
            //입력받은 수의 일의 자리수를 구함
            int digit2 = newNum % 10;
            //입력받은 수의 십의 자리수를 구함
            int digit1 = newNum / 10;

            int sum = digit1 + digit2;
            
            //처음에는 문자열로 바꿔서 숫자 하나씩 이어붙이는걸로 생각했다
            //숫자 -> 문자열 -> 숫자
            //과정이 복잡해짐
            // mixedNumString = Integer.toString(digit2) + Integer.toString(sum % 10);
            // mixedNumInt = Integer.parseInt(mixedNumString);
            
            
            //더 간단한 방법 - 정수에서 해결
            newNum = (digit2 * 10) + (sum % 10);
            count++;
            
            if(newNum == originNum){
                break;
            }
        }
        System.out.println(count);
    }
}
まず考えられる問題解決策は、各ビット数を文字列に変換し、接続してから整数に変換することです.
しかし10桁、1桁を求めると、この2桁を合わせて乗算で表すことができるので、より簡単な方法に変えることができます.
しかし,while文条件の記述に疑問が生じた.最初に作成したコードは以下の通りで、デバッグ結果に問題はありません.しかし百俊の採点結果はずっと間違っていて、いくら考えても原因がわかりません...例の入力例はすべて入っていて、結果値は一致しています.

처음에 작성했던 whilewhile(mixedNumInt != originNum){
            //입력받은 수의 일의 자리수를 구함
            int digit2 = newNum % 10;
            //입력받은 수의 십의 자리수를 구함
            int digit1 = newNum / 10;

            int sum = digit1 + digit2;

            
            //새로만들어진 수를 한 번 더 복사해서 사용했다
            //if 조건문 사용을 피하고 싶어서...
            mixedNumInt = (digit2 * 10) + (sum % 10);
            newNum = mixedNumInt;
            count++;
            
        }
        System.out.println(count);
        
なぜ間違っているのかを見つけることができれば、採点基準を再検査しなければなりません.