BOJ/백준-1065-python

cosmos·2021년 1월 9일
4
post-thumbnail

문제 📖



처음에 문제를 접했을 때, 조건이 이해가 가지않아 엄청 당황스러웠었다.
문제의 조건은 range(1,1000)사이의 한수, 한수의 갯수를 출력하는 문제이다.
문제가 이해가가지 않을때는 입출력 예시를 보면 도움이된다.

  • 110 -> 99
  • 1 -> 1
  • 210 -> 105
  • 1000 -> 144

range(1,1000)이므로 한자리수, 두자리수, 세자리수, 네자리수(1000)만 고려하면 될 것같다.

  • 한 자리수
    -> 등차수열이란 각 자리수마다 일정한 공차가 있어야하는 수인데
    1,2,3,,,,,9 와 같은 수는 어떻게해야하는가? 입출력을보면 한자리수 마다 1개씩 인정을 해줌을 확인할 수 있다.
  • 두 자리수
    -> 10,11,12,...99 는 각 자리수 마다 공차가 1이므로 두자리수는 각 1개씩 인정해줌을 확인할 수 있다.
  • 세 자리수
    -> 좀 더 쉬운 이해를 위해 아래와 같이 정리했다.
    111 (0) 123 (1) 135(2) 147(3) 159(4) 2
    222 (0) 234(1) 246(2) 258(3)
    333 (0) 345(1) 357(2) 369(3)
    444 (0) 456(1) 468(2)
    555 (0) 567(1) 579(2)
    666 (0) 678(1)
    777 (0) 789(1)
    888 (0)
    999 (0)
  • 네 자리수
    -> 1000 은 인정 x

풀이🙏

  • 한 자리수
    -> 한 자리수를 입력받았을 때, print(N)을 출력
  • 두 자리수
    -> 두 자리수 N을 입력받았을 때, print(N)을 출력
  • 세 자리수
    -> print(기존 99까지의 N + 각 자리수마다의 공차가 성립하는 수)
    -> N의 각 자릿수를 list(map(int,str(N)))으로 분할,append하고 첫번째 자리수와 두번째 자리수의 공차와 두번째 자리수와 세번째 자리수의 공차가 같으면 한수의 조건 성립
  • 네 자리수
    -> 1000은 각 자리수마다 공차가 성립되지않으므로 세 자리수로 넘어간다.

코드💻

# boj, 1065 : 한수, python3
N = int(input())

def hansu(num):
    cnt = 0
    for i in range(1,num+1):
        if i <= 99:
            cnt += 1
        else:
            nums = list(map(int, str(i)))
            if nums[0] - nums[1] == nums[1] - nums[2]:
                cnt += 1
    print(cnt)

hansu(N)

결과😎

출처📝

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

풀코드

github

0개의 댓글