728x90
반응형
https://www.acmicpc.net/problem/1065
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
예제 입력 1
110
예제 출력 1
99
예제 입력 2
210
예제 출력 2
105
Code
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static boolean equalDefference(int num){
int temp = num;
ArrayList<Integer> tempArray = new ArrayList<>();
if(num < 100){
return true;
} else if(num == 1000){
return false;
}
else{
while(num != 0){
tempArray.add(num%10);
num = num / 10;
}
for(int i = 0; i < tempArray.size() -2; i++){
if(tempArray.get(i) - tempArray.get(i+1) == tempArray.get(i+1) - tempArray.get(i+2)){
return true;
}
}
}
return false;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
int count = 0;
for(int i = 1; i<= num; i++){
if(equalDefference(i) == true){
count ++;
}
}
equalDefference(1000);
System.out.println(count);
}
}
Point
등차수열을 구하는 메서드를 작성하여 풀었다.
각 자릿수를 배열에 추가하여 반복문을 통해 각 자릿수의 공차가 같다면 등차수열로 판단하여 true
를 리턴하였다.
그런데 num == 1000
일 경우 반복문이 돌면서 각 자릿수가 0
일 경우 true
를 반환하여 따로 else if
로 빼주었다.
문제에서 요구 조건은 1000보다 작거나 같은 수 이기 때문에 위와 같이 한가지만 처리하면 되었고, 만약 조건이 더 커진다면 로직을 더 바꿔봐야 될 것 같다.
728x90
반응형
'1.프로그래밍 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 폰켓몬 Java (0) | 2022.07.26 |
---|---|
[알고리즘] 백준 2941번 크로아티아 알파벳 Java (0) | 2022.07.24 |
[알고리즘] 백준 4673 셀프 넘버 Java (1) | 2022.07.19 |
[알고리즘] Java 틱택토 게임 (Tic Tac Toe) (0) | 2022.07.15 |
[알고리즘] 백준 1110번 Java (0) | 2022.07.14 |