BAEKJOON : 1065

No. 1065

1. Problem




2. My Solution

  • 한자리와 두자리 수는 모두 한수임 (연속된 두 수의 차이가 다르다고 볼 수 없기 때문)
  • 등차수열 판단 중에 차이값이 하나라도 다르면 연산 종료
import sys

def func(num):
    global count
    numList = list(map(int,list(str(num))))
    d1 = numList[0] - numList[1]

    for i in range(1,len(numList)-1):
        d2 = numList[i] - numList[i+1]

        if d1 != d2:
            return
    
    count += 1
     

n = int(sys.stdin.readline().strip())
count = 0

if n < 100:
    count = n
else:
    for num in range(100,n+1):
        func(num)
    count += 99

print(count)




3. Others' Solutions

  • 연속된 두 수의 차이들이 모두 같은지 아닌지 판별하기 위해 set 자료형 이용
  • 차이값들의 집합 요소 개수가 1이면 등차수열임 (모두 중복 = 모두 같음)
  • 100이 아닌 10부터 적용해도 같은 결과
  • 내 코드와 비교했을 때, 연속된 두 값의 차이값을 모두 구해야 함
import sys

def func(num):
    global count
    numList = list(map(int,list(str(num))))
    valid = set()

    for i in range(0,len(numList)-1):
        valid.add(numList[i] - numList[i+1])

    if len(valid) == 1:		# 모두 같은 값 (=등차수열)
        count += 1
    
    
n = int(sys.stdin.readline().strip())
count = 0

if n < 100:
    count = n
else:
    for num in range(100,n+1):
        func(num)
    count += 99

print(count)




4. Learned

  • 전역변수를 함수내에서 변경하기 위해선 함수내에서 global 지정해야함 (숫자 자료형만 해당)
    단지 읽는 것은 global 키워드를 지정하지 않아도됨

  • 모두 같은 값인지 판별하기 위해서는 set 자료형을 사용해보자

좋은 웹페이지 즐겨찾기