[백준] 1065번 한수 파이썬 python
본문 바로가기
Python/Python 코딩테스트

[백준] 1065번 한수 파이썬 python

by 쏠수있어ㅤ 2022. 1. 26.
반응형

한수 

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 99709 52892 44424 52.937%

문제

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

예제 입력 1 복사

110

예제 출력 1 복사

99

예제 입력 2 복사

1

예제 출력 2 복사

1

예제 입력 3 복사

210

예제 출력 3 복사

105

예제 입력 4 복사

1000

예제 출력 4 복사

144

예제 입력 5 복사

500

예제 출력 5 복사

119

출처

  • 문제를 번역한 사람: baekjoon
  • 어색한 표현을 찾은 사람: bdh3313
  • 잘못된 데이터를 찾은 사람: djm03178
  • 데이터를 추가한 사람: jh05013

알고리즘 분류

 

 

 

정답 코드 : 

방법 1. 자리수로 나누기

n = int(input())

if n<100:
    print(n)
elif n<1000:
    c = 0
    for i in range(100, n+1):
        N = int(i)
        if (N%10-N//10%10)==(N//10%10-N//100):
            c += 1
    print(99+c)
else:
    print(144)

 

방법 2. for문 먼저 돌리기

n = int(input())
c = 0
for i in range(1, n+1):
    if i<100:
        c += 1
    elif i<1000:
        if (i%10-i//10%10 == i//10%10-i//100):
            c += 1
print(c)

 

 

풀이 : 

한수란 ? 

각 수의 자리가 등차수열을 이루는 수

ex) 

123 -> 1, 2, 3 은 1씩 증가하는 등차수열 => 123은 한수

135 -> 1, 3, 5 은 2씩 증가하는 등차수열 = > 135는 한수

22 -> 2, 2 는 0씩 증가하는 등차수열 => 22는 한수

5 -> 5는 증감이없으나 등차수열로 본다. (이것은 첫번째 예제에서 힌트를 얻을 수 있다.)

즉, 1~99까지는 모두 한수

111, 123, 135 ... 999 이렇게 한수가 증가한다. (1,000은 한수가 아니다)

 

n의 값이 100보다 작으면 c에 +=1 을 하고

n의 값이 세 자리 수면 (100~999) 세번째 자리수에서 두번째 자리수 뺀것과 두번째 자리수에서 첫번째 자리수 뺀 값이 같으면 c+=1을 해준다. 

 

세 자리 수의 첫번째 자리수 구하기 : n//100

세 자리 수의 두번째 자리수 구하기 : n//10%10

세 자리 수의 세번째 자리수 구하기 : n%10

반응형

댓글