본문 바로가기
백준

백준 1065: 한수(java)

by unhyepnhj 2024. 8. 2.

문제


풀이

 

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;