이전에 자바로 풀었던 문제를 파이썬을 공부하면서 다시 풀어보았다.
먼저 문제설명을 이해해보면, 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();
}
}
반응형
'컴퓨터 공부 > 📚 Baekjoon(백준)' 카테고리의 다른 글
[백준/알고리즘/python/java] 1978번 - 소수 찾기 (0) | 2021.01.28 |
---|---|
[백준/알고리즘/python/java] 2839번 - 설탕 배달 (0) | 2021.01.28 |
[백준/알고리즘/python/java] 2941번 - 크로아티아 알파벳 (0) | 2021.01.27 |
[백준/알고리즘/python/java] 1316번 - 그룹 단어 체커 (0) | 2021.01.27 |
[백준/알고리즘/python/java] 4673번 - 셀프 넘버 (0) | 2021.01.27 |