문제 링크
https://www.acmicpc.net/problem/1065
나의 코드 (Python)
# 한수 체크
def check(num):
cnt = 0 # 카운팅 변수
for i in range(1, num+1):
res = list(map(int, str(i))) # 각 자리를 리스트로 저장
res_len = len(res) # 입력값이 몇 자리 수인지 판단
# 1000은 한수가 될 수 없음
# 세 자릿수는 값을 비교함
# 두 자릿수는 무조건 한수가 됨
# 한 자릿수는 한수
if res_len == 3: # 세 자릿수 각 자리 비교
if res[0] - res[1] == res[1] - res[2]:
cnt += 1
elif res_len <= 2: # 두 자릿수 이하
cnt += 1
return cnt
n = int(input()) # 입력
print(check(n)) # 한수의 개수 출력
한수는 각 자리의 수가 등차수열인 수입니다.
입력값은 1~1000 사이기 때문에 3가지 경우가 발생합니다.
1000 : 한수가 될 수 없음
999~100 : 각 자리를 비교해서 한수인지 파악
99~1 : 무조건 한수가 됨
따라서 이를 비교하기 위해 주어진 값보다 작은 모든 값을 찾아야 하기 때문에 for문을 사용하여 1~주어진 값까지 모든 수를 체크합니다.
수를 각 자리로 분해하는 식은 res = list(map(int, str(i))) 입니다. 이는 str를 사용해 자리를 문자열로 분해한 값을 map()을 통해 int형으로 바꿔서 list에 저장하는 방법입니다.
이제 이 배열의 수가 몇 개인지에 따른 if문을 사용하면 됩니다. list안의 개수는 len() 함수를 이용하여 구할 수 있습니다.
'코딩공부 > 백준 (python)' 카테고리의 다른 글
[백준 11720] 숫자의 합 (Python) (0) | 2022.03.09 |
---|---|
[백준 11654] 아스키 코드 (Python) (0) | 2022.03.09 |
[백준 4673] 셀프 넘버 (Python) (0) | 2022.03.01 |
[백준 15596] 정수 N개의 합 (Python) (0) | 2022.03.01 |
[백준 4344] 평균은 넘겠지 (Python) (0) | 2022.02.22 |
댓글