냠냠뇸
[백준/1065] 한수 (등차수열) 본문
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
내 답안
n=int(input())
m=str(n)
num=""
many=[]
if len(m)==1 or len(m)==2:
print(n)
elif len(m)==3:
for i in range(100,n+1):
num=str(i)
a=int(num[0])
b=int(num[1])
c=int(num[2])
if b-a == c-b or a-b == b-c:
many.append(1)
elif a==b and b==c:
many.append(1)
print(99+len(many))
elif len(m)==4:
print(144)
변수 선언을 좀 많이 했는데,, 풀어보자면
n : 입력받는 수
m : n을 문자형으로 변환시킨값
num : 입력된 수의 각 자릿수를 for문을 이용해 하나씩 문자형으로 저장하기 위해 선언
many : if문 조건에 맞을 때 임의의 값 '1'을 해당 배열에 배정(append)
정수같은 숫자형 자료는 길이를 읽는법이 따로 없기 때문에 (있긴한데 구글링해보니 복잡한듯..)입력받은 정수를 문자형으로 변환하여 m이라는 새로운 변수에 저장한다.
1. 한자릿수거나 두자릿수일 때 (n = 1~9 or 10~99) 모두 한수이니 n을 출력한다.
2. 세자릿수 일때 (n = 100 ~ 999)
for문을 통해 num의 각 위치에 자릿수를 저장하고, 논리관계를 따져 문제의 조건에 맞는 수일때 many배열에 임의의 값 1을 붙인다. 참고로 111,222,333... 도 한수이니, 이 경우에도 값을 추가해준다.
3. 네자릿수 일때 (n = 1000)
문제의 입출력 예시에 나와있듯 주어진 값이 1000일때의 출력값인 144가 나오면 된다.
약간 지저분한데 ㅎ 인간승리로 출력에 성공했다...^^
다른사람 답안 #1
N=int(input())
if N<=99:
sum=N
else:
sum=99
for i in range(100,N+1):
if i//100+i%10==((i%100)//10)*2:
sum+=1
print(sum)
나와 같이 입력값이 1~99일때는 입력값을 그대로 출력하고
그 외(100~1000)의 경우에는 if문을 이용해 조건에 맞을때 마다
99에 1씩 추가해간다.
// 연산자를 봐왔는데,, 모르고 있어서 검색해보니
나누기 연산 후 소수점 이하의 수를 버리고,정수 부분의 수만 구함 이라고 한다.
// 연산자 -> 나누기 연산 후 정수 부분만 구함
% 연산자 -> 나누기 연산 후 나머지를 구함
조건식을 정리해보면 이렇다!
i // 100 : i의 백의자리 수
i%10 : i의 일의자리 수
i%100/10 : i의 십의자리 수
자릿수 구하는 문제에서 이렇게 많이 쓰이는건 봤는데.. 잘 기억해두자
a,b,c 가 등차수열을 이룰때 (a<b<c)
c - a = 2b 인 등차수열의 성질을 사용했다..
나도 고등수학했는데..^^...... 이래서 수학을 잘해야...ㅎ
'Python > Coding Test 기록' 카테고리의 다른 글
[프로그래머스/LV.1] 체육복 (그리디) (0) | 2022.01.29 |
---|---|
[프로그래머스/LV.1] 모의고사(완전탐색) (0) | 2022.01.24 |
[백준/1620] 나는야 포켓몬 마스터 이다솜 (해시,딕셔너리) (0) | 2022.01.20 |
[프로그래머스/LV.1] 완주하지 못한 선수(해시) (0) | 2022.01.19 |
[프로그래머스/LV.1] 소수 만들기 (0) | 2022.01.17 |