N6. 白駿1065
一手の問題.
漢秀という言葉を初めて聞きました.
では簡単に説明してみましたが、何なのか分かりませんが、まず例入出力例を見て、簡単に理解しました.
3桁から2つ以上の差があり、比較すると等差数列であることがわかります.
1桁と2桁の数字には値差がなく、1つしかないので、すべて含まれています.
1桁と2桁はまず基本的に含まれる関数を考えた.
int count=0;
for(int i=1; i<=n; i++) {
if(i < 100) count++;
これで簡単に含めることができます.そこでnはユーザに必要な数を入力する変数である.
次に、100と1000の間の数字は
%10, /10
を使用して、新しい配列に各ビット数を格納します. else if(i >= 100 && i < 1000) {
int b = i;
int j = 0;
while(b!=0) { // b값이 0이될때까지 계속
save[j] = b%10; // 각자리수를 배열에 하나씩 저장
b /= 10;
j++;
}
result[0] = save[0] - save[1];
result[1] = save[1] - save[2];
if(result[0] == result[1]) count++;
各ビット数は、アレイsave[]
に格納される.各ビット数の差異を
result[]
に格納して比較し、値が一致するとカウントするように設計した.<フルコード>
import java.util.Scanner;
public class Main01 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] save = new int[4];
int[] result = new int[3];
int count=0;
for(int i=1; i<=n; i++) {
if(i < 100) count++;
else if(i >= 100 && i < 1000) {
int b = i;
int j = 0;
while(b!=0) { // b값이 0이될때까지 계속
save[j] = b%10; // 각자리수를 배열에 하나씩 저장
b /= 10;
j++;
}
result[0] = save[0] - save[1];
result[1] = save[1] - save[2];
if(result[0] == result[1]) count++;
} else {
int b = i;
int j = 0;
while(b!=0) { // i값이 0이될때까지 계속
save[j] = b%10; // 각자리수를 배열에 하나씩 저장
b /= 10; // b값 새로고침
j++;
}
result[0] = save[0] - save[1];
result[1] = save[1] - save[2];
result[2] = save[2] - save[3];
if(result[0] == result[1] && result[1] == result[2])
count++;
}
}
System.out.println(count);
}
}
ps. 중간에 각자리수의 차이를 절댓값(abs)로 저장하였더니 101, 195와 같은 수까지 함께 계산되어져 곤란했다. 이거 찾는데 40분은 잡아먹힘..😳
Reference
この問題について(N6. 白駿1065), 我々は、より多くの情報をここで見つけました https://velog.io/@jln0616/N6.-백준-1065번テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol