문제 내용은 입력으로 N을 받아서, 1부터 N까지 등차수열인 항목의 갯수를 세어줘야 하는데 등차수열이란 123을 예제로 든다면 1에서 2까지 +1이고 2에서 3까지 +1로 증가하는 값이 동일하기 때문에 등차수열이고, 128은 2에서 8시 +6이라 모두 동일하지 않기 때문에 등차수열이 아니다. 그리고 헷갈리기 쉬운 한 자리 수와, 두 자리 수는 비교할 것이 없으므로 모두 등차수열이다.
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 target = Integer.parseInt(br.readLine());
int count = 0;
for (int i = 1; i <= target; i++) {
if (String.valueOf(i).length() <= 2) {
count++;
} else {
String[] split = String.valueOf(i).split("");
int compare = 0;
boolean check = true;
for (int j = 0; j < split.length - 1; j++) {
if (j == 0) {
compare = Integer.parseInt(split[j + 1]) - Integer.parseInt(split[j]);
} else {
if (Integer.parseInt(split[j + 1]) - Integer.parseInt(split[j]) != compare) {
check = false;
break;
}
}
}
if (check) {
count++;
}
}
}
System.out.println(count);
}
}
문제를 풀어보자면 1부터 시작해서 입력받은 값 까지 for문을 돌려주되, 2자리 수 이하는 계산할 필요가 없으니 모두 카운트로 증가시키고, 3자리 수 부터 비교를 시작해야 하는데, 일단 String으로 만들어서 Split으로 배열 형태로 쪼갠 다음 값을 비교하면서 모든 값이 증가하는 기준이 동일할 경우에는 True 그 외에는 false를 유지하게 만들면서, for문 돌린 후에 boolean 확인해서 증가 처리해주면 되고 for문을 모두 돌리고 난 다음에는 맞는 값의 수를 반환해주면 되겠다.
Leave a Reply