일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Android
- androidstudio
- bitmap
- BOJ
- Canvas
- CS
- Database
- DBeaver
- DP
- Ecilpse
- Eclipse
- firebase
- git
- github
- GooglePlayServices
- gradle
- IDE
- IntelliJ
- java
- json
- kotlin
- level2
- linux
- mariadb
- MYSQL
- Paint
- permission
- python
- Sorting
- sourcetree
Archives
will come true
[백준] 1065번 - 한수 (Java) 본문
728x90
문제
단계별 풀어보기 - 함수, https://www.acmicpc.net/problem/1065
*한수 : 각 자리가 등차수열을 이루는 양의 정수.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int count = 0;
for(int i = 1; i <= N; i++){
if(isHansu(i)){
count++;
}
}
System.out.println(count);
}
// 한수 체크
static boolean isHansu(int n){
if(n < 100) { return true; }
int right = n % 10; // 오른쪽 수
n /= 10;
int left = n % 10; // 왼쪽 수
n /= 10;
int diff = right - left; // 두 수의 차이 (절대값 아님, +- 구분 주의)
while(n > 0){
right = left;
left = n % 10;
n /= 10;
if(diff != right - left)
return false;
}
return true;
}
}
- 반복문을 통해 1~N 까지 수에 대해 차례대로 한수여부를 체크한다.
- 한수 여부를 체크하는 코드를 isHansu(int n) 메서드로 분리
- 1자리, 2자리 양의 정수는 비교할 자리수가 하나뿐이라 무조건 한수이다. (ex: 1, 2, ..., 98, 99)
- 3자리 이상 양의 정수는 1의 자리수(right)와 10의 자리수(left) 값을 추출해서 차이(diff)를 구한다.
- 이후, 100의 자리수 부터 왼쪽으로 하나씩 값을 추출해 차이를 구한다.
- 차이가 처음 구했던 diff와 다를 경우 한수가 아니다.
- 두 자리수의 차이를 구할 때 Math.abs()로 절대값을 구하지 않도록 주의하자. 무심결에 diff = Math.abs(right - left); 와 같이 구하게 되면 101, 202, 303 등 수도 한수로 받아들이게 된다.
728x90
'Algorithm' 카테고리의 다른 글
[백준] 5622번 - 다이얼 (Java) (0) | 2022.02.07 |
---|---|
[백준] 2908 번 - 상수 (Java) (0) | 2022.02.07 |
[프로그래머스/Level2] 문자열 압축 (Java) (0) | 2022.01.19 |
[프로그래머스/Level2] 올바른 괄호 (Java) (0) | 2022.01.19 |
[프로그래머스/Level2] 땅따먹기 (Java) (0) | 2022.01.19 |
Comments