취미가 좋다

1065. 한수 본문

알고리즘 문제풀이/백준

1065. 한수

benlee73 2021. 8. 5. 22:55

https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

Solution

N = int(input())
ans = 0
r = None

for num in range(1, N+1):
    a = num % 10
    num = int(num / 10)

    while(True):
        if num == 0 :
            ans += 1
            r = None
            break

        b = num % 10
        num = int(num / 10)

        if r == None:
            r = a-b
        elif r != a-b:
            r = None
            break
        a = b

print(ans)
  • for문으로 1부터 입력받은 수까지 하나씩 조건을 살펴본다.
  • 그 수의 각 자리수와 이전 자리수와의 차이가 끝까지 일치하면 ans를 더한다.
  • 차이가 달라지면 break로 while문을 빠져나온다.
  • 더 짧고 간단한 방법이 있을 것 같았다.

 

another

N = int(input())
ans = 0
for num in range(1, N+1):
    if num < 100 or ( num//100 + num%10 == 2*((num%100)//10) ):
        ans += 1        
print(ans)
  • 입력이 1000 이하의 자연수라는 조건때문에, 위의 코드가 가능하다.
  • 만약 2자리 수 자연수라면 모든 수가 조건을 만족한다.
  • 만약 3자리 수가 abc라고 한다면 a-b = b-c 이어야 한다. 이는 a+c = 2*b 로 볼 수 있다.
  • num//100 = a, num%10 = c, (num%100)//10 = b 이다.
  • '//' 는 몫의 자연수를, '%' 는 나머지를 구한다.

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

22868. 산책 (small)  (0) 2021.09.04
14890. 경사로  (0) 2021.08.26
1018. 체스판 다시 칠하기  (0) 2021.08.14
7568. 덩치  (0) 2021.08.13
2231. 분해합  (0) 2021.08.13
Comments