백준/브루트 포스
1065 한수
have a good time
2022. 2. 8. 21:24
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());
int count=0;
for(int i=1; i<= N;i++) {
if(i<100) {
count++;
}else if(i<1000) {
String input[] = Integer.toString(i).split("");
int first = Integer.parseInt(input[0]);
int second = Integer.parseInt(input[1]);
int third = Integer.parseInt(input[2]);
if(second - first == third - second) {
count++;
}
}
}
System.out.println(count);
}
}

규칙을 생각해보면,
i = 1 2 3 4 5 6 7 8 9 일때는 한수이다.
i = 10 ~ 99 까지도 두개의 수만 고려하기 때문에 한수이다.
예를 들어 17 이라면,
두 개의 수 1 과 7이 6만큼 차이나는 등차수열이다.
때문에 위의 코드에서도 i<100 인 경우 무조건 count 를 높여주었다.
그리고 남은 수는 100~1000 이다. (문제에서 1000보다 작거나 같은 자연수가 주어진다고 했다.)
1000은 등차수열이 아니기 때문에 고려할 대상이 아니라서 for 문에서 제외시켰다.
그런데 문제는 int 형은 각 자리수를 비교하려면 좀 복잡하다.
그래서 string 으로 받은 뒤, 다시 int 형으로 바꿔서 그 차이를 비교했다.
String input[] = Integer.toString(i).split("");
특히 이 코드는, int 형 i를 string 으로 변환하고 이를 공백을 기준으로 잘라서 배열로 만들어 넣어준다.
예를 들어 123 이라면,
first = Integer.parseInt(input[0]) = 1,
second = Integer.parseInt(input[1] = 2,
third = Integer.parseInt(input[2]) = 3
이다.
그래서 third - second = second - first 이면 등차수열이기 때문에
이 조건을 만족한다면 count 를 증가시켰다.