백준 1065번

    문제

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

     

    1065번: 한수

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

    www.acmicpc.net

    나의 풀이

    inputNum=int(input())
    
    def isSequence(n):
    	if n<100:
    		return True
    	else:
    		arr=list(str(n))
    		if int(arr[2])-int(arr[1])==int(arr[1])-int(arr[0]):
    			return True
    	return False
    
    count=0
    for i in range(1,inputNum+1):
    	if isSequence(i):
    		count+=1
    
    print(count)

    다른 사람의 풀이

    def yes(n):
        if n<100:
            return True
        s = str(n)
        return int(s[1])*2 == int(s[0])+int(s[2])
    
    n = int(input())
    print(sum([yes(i) for i in range(1,n+1)]))

    등차수열의 성질을 이용하여 n[1]*2=n[0]+n[2] 라는 식으로 간단하게 사용하였다. 

    또한 나처럼 if를 이용하지 않고 return 값에 ==을 사용하여 맞다면 True, 틀리다면 False가 반환되게 코드를 작성하였다.

    또한 print를 할 때 나처럼 잡다한 for문을 사용하지 않고 식인 yes(i)를 사용하여 어차피 참이면 1이 반환될 것이므로 나처럼 count를 사용해 1씩 더해주지 않아도 되었다. 그리고 간단하게 sum함수를 이용해 코드를 작성하였다.

     

    배울 것이 많은 코드이므로 한 번 더 확인해보는 것을 추천한다.

    '알고리즘 공부' 카테고리의 다른 글

    백준 1316번 (미해결)  (0) 2022.12.08
    백준 2941번  (0) 2022.12.08
    백준 4673번, if문 not in (미해결)  (0) 2022.12.06
    백준 10250번, divmod()  (0) 2022.12.03
    백준 1712번  (0) 2022.11.30

    댓글