루나의 TIL 기술 블로그

백준 1065 한수

|

백준 1065번 한수 문제

사고 과정

100미만이면 입력한 수를 출력하고, 100이상이면 공차가 같은 수들의 리스트를 구해서
(일의자리 - 십의자리 = 십의자리 - 백의자리 )그 수들의 갯수 +99 를 출력한다.

n = int(input())

if n < 100:
    print(n)
if n => 100: #비교연산자 위치 틀렸다
    for i in range(100,n):
        #num = list(map(int, str(i))) 넣어야함
        if num[2] - num[1] = num[1] - num[0]:
            nums.add(num)
    print(len(nums)+99)


제출 답안 1

n = int(input())
nums = set()
#그냥 nums=[]했더니 리스트에는 add함수가 없다고 해서 set으로 만들었다

if n < 100:
    print(n)
if n >= 100: #크거나 같다 비교연산자
    for i in range(100,n+1): 
        #n이 포함되려면 1을 더해야한다
        hund = int(i / 100)
        ten = int((i % 100) / 10)
        one = int(i % 10)
        #인터넷에서 찾은 각 자리수별 숫자 추출법
        if hund - ten == ten - one:
            nums.add(i)
    print(len(nums)+99)

제출 답안 2

n = int(input())
nums = set()

if n < 100:
    print(n)
if n >= 100:
    for i in range(100,n+1):
        num = list(map(int, str(i)))
        if num[2] - num[1] == num[1] - num[0]:
            nums.add(i)
    print(len(nums)+99)

주요 포인트 및 생각해볼 점

map함수는 map(변환 함수, 순회 가능한 데이터) 이렇게 사용한다.

num = list(map(int, str(i)))
이 구문은 문자형으로 저장된 i를 iterate해서(int는 iterate할 수 없다)
map을 이용해 하나씩 int형으로 변환해서 num이라는 리스트에 넣는다는 뜻이다.

뭔가 쓸데없이 복잡해지는 것 같기도한데.. 숫자는 숫자로 처리하는게 좋은 것 같다.
답을 안 보고 문법만 참고해서 끝까지 풀 수 있게 됐다!