반응형
문제
풀이
package step6;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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.println(hansu(n));
br.close();
}
public static int hansu(int n) {
int cnt = 0;//한수의 개수
if(n < 100) {
//1~99는 그 자체가 수열이다.
return n;
}else {
cnt = 99;
if(n == 1000) {
n = 999;//1000은 등차수열이 아니기때문에 -1 해준다.
}
for(int i = 100; i <= n; i++) {
int n1 = i % 10; //일의 자리수
int n2 = (i /10) % 10; //십의 자리수
int n3 = i /100; //백의 자리수
if((n1 - n2) == (n2 - n3)) {
//각 자리수가 등차수열인 경우
cnt++;
}
}
}
return cnt;
}
}
팁
[ 1~99 ]
1~99의 숫자는 각 자릿수의 공차가 일정한 수열이다.
따라서, 100보다 작은 수 n의 경우에는 n의 값을 그대로 리턴해준다.
if(n < 100) {
//1~99는 그 자체가 수열이다.
return n;
}
[ 1000 ]
로직을 모두 세자리수로 가정하기 위해, 1000일 경우에 1000은 등차수열이 아니므로 n을 999로 바꿔준다.
if(n == 1000) {
n = 999;//1000은 등차수열이 아니기때문에 -1 해준다.
}
[ 99보다 크고 1000보다 작은 값]
- 1~99는 각각 등차수열을 이루므로 cnt를 99로 초기화한다.- 각 자릿수를 분리하여 변수에 저장하고 (백의자릿수 - 십의자리수)와 (십의자릿수-일의자릿수)의 값이 같으면 cnt를 1씩 증가한다.
출처
반응형
'알고리즘 > Java' 카테고리의 다른 글
[백준/단계별로 풀어보기] 7. 문자열 - 11720.숫자의 합 (Java8) (0) | 2021.09.03 |
---|---|
[백준/단계별로 풀어보기] 7. 문자열 - 11654.아스키 코드 (Java8) (0) | 2021.09.03 |
[백준/단계별로 풀어보기] 6. 함수 - 4673.셀프 넘버 (Java8) (0) | 2021.09.02 |
[백준/단계별로 풀어보기] 6. 함수 - 15596.정수 N개의 합 (Java8) (0) | 2021.09.02 |
[백준/단계별로 풀어보기] 5. 1차원 배열 - 4344.평균은 넘겠지 (Java8) (0) | 2021.09.01 |