예제 입력 1, 2에서 볼 수 있듯
100미만의 수는 그 자체로 한수이다. 숫자가 1자리, 2자리는 그 자체로 등차수열이라고 할 수 있다.
결국 경우의 수를 따져봐야 하는 것은 100-1000의 숫자이다.
즉, 3자리의 숫자에 대한 한수 여부를 확인하면 되므로 (1000은 한수가 아니다)
백의 자리 숫자 : N / 100
십의 자리 숫자 : (N/10) % 10
일의 자리 숫자: N % 10 이고,
등차 수열의 경우
백의 자리 숫자를 X, 등차를 a라고 하면
백의 자리 숫자: X
십의 자리 숫자: X+a
일의 자리 숫자: X+2a이므로
(십의자리 숫자) *2 = (백의 자리 숫자) + (일의 자리 숫자) 의 관계를 갖고있다.
이를 식으로 표현하면,
((N/10) % 10) *2 = (N/100) + (N%10) 을 만족하면 된다.
//한수 만들기
public static int hansu(int N){
int count = 0;
if (N < 100){
return N;
} else {
count = 99;
for (int i=100; i<= N; i++){
int hund = i/100;
int ten = (i/10)%10;
int one = i%10;
if ((hund + one) == (ten * 2)){
count ++;
}
}
}
return count;
}
이 함수를 짜면 메인 로직은 건들것이 별로 없다.
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
System.out.print(hansu(N));
}
//한수 만들기
public static int hansu(int N){
int count = 0;
if (N < 100){
return N;
} else {
count = 99;
for (int i=100; i<= N; i++){
int hund = i/100;
int ten = (i/10)%10;
int one = i%10;
if ((hund + one) == (ten * 2)){
count ++;
}
}
}
return count;
}
}
'Programming > 알고리즘' 카테고리의 다른 글
[백준] 11720 - 숫자의 합 - JAVA[자바] (0) | 2022.11.29 |
---|---|
[백준] 11654 - 아스키 코드- JAVA[자바] (0) | 2022.11.29 |
[백준] 4673 - JAVA[자바] (0) | 2022.11.29 |
[백준] 4344 - 평균은 넘겠지 - JAVA[자바] (0) | 2022.11.27 |
[백준] 8958 - OX퀴즈 - JAVA[자바] (0) | 2022.11.27 |