컴퓨터 공부/📚 Baekjoon(백준)

[백준/알고리즘/python/java] 1065번 - 한수

letzgorats 2021. 1. 26. 20:29

이미지를 누르면 문제링크를 보실 수 있습니다.
[1065번 - 한수]

이전에 자바로 풀었던 문제를 파이썬을 공부하면서 다시 풀어보았다.

 

먼저 문제설명을 이해해보면, 100전까지의 모든 양수는 '한수'라는 것을 알 수 있다.

즉, 사용자가 입력한 수가 100보다 작은 수라면, 그대로 그 숫자가 '한수'의 개수이다.

 

그러면, 사용자가 100 이상의 숫자를 입력한다면, 100부터 사용자가 입력한 수까지 반복문을 돌면서 한수의 조건을 만족하는 등차수열의 공식을 그대로 적용하면 된다.

 

코드는 아래와 같다.

def hansu(number):
    count = 99  # 100 전까지의 모든 자연수는 '한수'이기 때문에 초기변수를 99로 설정한다.
    if(number < 100):  
        print(number) 
    else: 
        for i in range(100, number+1): 
            x = str(i) # 우선 숫자를 string으로 형변환을 시켜준다.(인덱싱을 위해서)
            a = int(x[0]) # 백의 자리 숫자는 a
            b = int(x[1])  # 십의 자리 숫자는 b
            c = int(x[2])  # 일의 자리 숫자는 c 
            if(a+c == 2*b): # 한수의 조건을 만족하는 등차수열의 공식을 그대로 적용  
                count += 1   # count를 1씩 증가 
        print(count)    


x = int(input())
hansu(x)

 

이전에 자바로 풀었을 때보다 더 간결하게 풀 수 있었던 것 같다.

파이썬이 자바에 비해 메모리 사용량은 증가하였지만 속도는 확실히 빨라졌다.

 

(아래는 자바 코드)

import java.util.Scanner;
public class Main{
	//한수
	static int hansu(int n) {
		int number1 = n/100 %10;
		int number2 = n/10 % 10;
		int number3 = n %10;
		
		if(2*number2 == number1+number3){
			return 1;
		}
		return  0;
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		if(n<100) System.out.println(n);
		else {
			int result = 99;
			for(int i=100;i<=n;i++) {
				result += hansu(i);
			}
			//n이 1000일 때 hansu(1000) 이 1을 반환하므로 1개 빼줘야 한다.
			if(n == 1000) result--;
			System.out.println(result);
		}
		sc.close();
	}
}

 

 

반응형