문제
풀이
N이 1부터 1000까지로 한정되기 때문에 매우 간단하게 풀이할 수 있다. N이 한 자리 수이거나 두 자리 수일 때는 무조건 한수이고 1000일 때는 한수가 아니므로 N이 세 자리 수인 경우만 고려하면 된다.
if(N의 길이가 3){
if(N[2]-N[1]==N[1]-N[0])
N=한수
}
N이 세 자리 수일 때 한수인지 아닌지 판단하는 알고리즘을 간단히 작성하면 위와 같다.
전체 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int N=scanner.nextInt();
boolean[] arr=new boolean[N];
for(int i=0; i<N; i++) {
arr[i]=false;
}
for(int i=0; i<N; i++) {
char[] ch=String.valueOf(i+1).toCharArray();
if(ch.length==3) {
if(ch[2]-ch[1]==ch[1]-ch[0])
arr[i]=true;
}
else if(ch.length==4)
continue;
else
arr[i]=true;
}
int count=0;
for(int i=0; i<N; i++) {
if(arr[i])
count++;
}
System.out.println(count);
}
}
입력이 하나뿐이라 Scanner를 사용해도 무방할 듯 하여 Scanner를 사용했지만, BufferedReader를 이용해도 무방하다.
두 번째 for문에서 toCharArray() 메소드를 이용하여 정수 (i+1)을 1차원 문자 배열로 먼저 변환한 후 ch[n]끼리 연산하였는데, 아래와 같이 문자 상태에서 charAt() 메소드를 이용하여 비교해 주어도 된다.
String s=String.valueOf(i+1);
if(s.length()==3) {
if(s.charAt(2)-s.charAt(1)==s.charAt(1)-s.charAt(0))
arr[i]=true;
}
else if(s.length()==4)
continue;
else
arr[i]=true;
'백준' 카테고리의 다른 글
백준 5397: 키로거(java) (0) | 2024.08.07 |
---|---|
백준 1302: 베스트셀러(java) (0) | 2024.08.07 |
백준 1935: 후위 표기식 2(java) (0) | 2024.07.25 |
백준 17413: 단어 뒤집기 2(java) (0) | 2024.07.24 |
백준 11478: 서로 다른 부분 문자열의 개수(java) (0) | 2024.07.24 |