https://www.acmicpc.net/problem/1065
난이도 : 실버4
분류 : 브루트포스
코드
def han(N):
cnt = 0
for i in range(1, N+1):
lst = []
for j in str(i):
lst.append(int(j))
if sum(lst)/len(lst) == (lst[0] + lst[len(lst)-1]) / 2:
cnt += 1
else:
continue
return cnt
N = int(input())
print(han(N))
풀이
숫자 N을 입력받는다.
N의 각 자리수가 등차수열일때 N을 한수라고 한다.
1~N까지의 숫자중에서 한수의 개수를 출력해야 한다.
다음과 같이 연속된 두개의 수의 차가 일정한 수열을 등차수열이라고 한다.
1, 3, 5, 7
2, 4, 6, 8
등차수열의 평균값은 수열의 맨 처음과 끝의 합에서 2를 나눈 값과 같다.
1, 3, 5, 7 -> 평균 : (1+3+5+7)/4 = 1+7 / 2 = 4
def han(N):
cnt = 0
for i in range(1, N+1):
lst = []
for j in str(i):
lst.append(int(j))
매개변수로 받은 N을 반복문의 범위로 쓴다. 1~N까지 각각의 값을 i라 할 때,
i의 각 자리수를 구분하기 위해 for j in str(i)을 사용했다.
예를들어 i가 123이라면 123을 str로 형변환할 때 j는 반복문을 돌면서 '1', '2', '3'이 된다.
다시 각 자리수를 int로 형변환 하여 lst 리스트에 담는다.
if sum(lst)/len(lst) == (lst[0] + lst[len(lst)-1]) / 2:
cnt += 1
else:
continue
return cnt
lst = [1, 2, 3]이라면 len(lst) = 3이므로, sum(lst)/len(lst)로 lst 원소들의 평균을 구한다.
lst[0]과 lst[len(lst)-1]로 lst리스트의 맨 처음과 맨 마지막 원소의 합을 구하고 2로 나눈다.
등차수열의 평균값은 수열의 맨 처음과 끝의 합에서 2를 나눈 값과 같다.
123은 각 자리수가 등차수열인 한수에 해당하므로 cnt의 값을 1씩 올려준다.
조건에 해당하지 않으면 i값을 증가시키고 다시 반복문을 진행한다.
반복문을 완전히 빠져나오면 cnt를 반환하도록 한다.
'알고리즘 문제 풀이' 카테고리의 다른 글
[python] 백준 1316 : 그룹 단어 체커 (0) | 2022.02.07 |
---|---|
[python] 백준 2941 : 크로아티아 알파벳 (0) | 2022.02.06 |
[python] 백준 4673 : 셀프 넘버 (0) | 2022.02.05 |
[python] 백준 11050 : 이항 계수 (0) | 2022.02.05 |
[python] 백준 : 2869 달팽이는 올라가고 싶다 (0) | 2022.02.05 |