문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
코드
N = input()
def hansu(N):
count=99
if len(N)<=2:
print(N)
elif len(N)>2:
for i in range(100,int(N)+1):
if int(str(i)[1])-int(str(i)[0]) == int(str(i)[2])-int(str(i)[1]):
count+=1
print(count)
hansu(N)
코드 설명
문제에서 말하는 한수란,
위와 같이 각 자리 숫자의 간격이 일정한 경우를 말합니다.
128은 각 자리 숫자의 간격이 1, 6으로 다릅니다. 따라서 128은 한수가 아닙니다.
이제 코드를 보자면,
N = input()
N을 입력 받습니다.
def hansu(N):
count=99
if len(N)<=2:
print(N)
elif len(N)>2:
for i in range(100,int(N)+1):
if int(str(i)[1])-int(str(i)[0]) == int(str(i)[2])-int(str(i)[1]):
count+=1
print(count)
N보다 작은 수 중에서 한수가 몇 개인지 검사해 출력해주는 함수 hansu를 선언합니다.
만약 입력받은 숫자의 자리수가 2자리 이거나 그보다 작다면, 입력 받은 수를 그대로 출력합니다.
왜냐하면, N 한자리 숫자인 1~9인 경우,
1~9는 자릿수가 1 이므로 1~9까지 모두 등차 수열입니다.
두자리 숫자인 10~99인 경우,
10은 1 0 공차가 -1인 등차수열,
11은 1 1 공차가 0인 등차수열,
12는 1 2 공차가 1인 등차수열,
13은 1 3 공차가 2인 등차 수열,
14는 1 4 공차가 3인 등차수열,
.
.
.
99는 9 9 공차가 0인 등차수열
이 되므로, 이 또한 모두 등차수열이 됩니다.
N이 세자리 이상의 숫자가 된다면, 그때부터는 각 자리 숫자들에게 공차가 있는지 검사를 진행해야합니다.
N은 1000 이하의 숫자이므로, N이 세자리 수 일때의 한수만 검사하면 됩니다. (1000은 공차가 없기에 등차수열이 되지 못함)
우선, 1~99까지는 모두 한수이므로, 세자리 수 N의 한수를 세어줄 변수 count에 99를 입력한채로 선언시켜줍니다.
숫자 100~N들에서 공차 즉, (첫째 자리의 수 - 둘째 자리의 수) 와 (둘째 자리의 수 - 셋째 자리의 수) 가 같다면 count의 값을 1씩 증가 시켜줍니다.
모든 숫자들을 검사했다면, count를 출력해줍니다.
hansu(N)
함수 hansu에 가장 처음으로 입력 받았던 값 N을 넣어 호출시켜줍니다.
관련 개념 정리
input
파이썬에서는 값을 사용자로부터 입력받을때 input함수를 사용합니다.
입력받은 값을 넣을 변수 이름 = input("띄울 메세지")
단! input함수는 입력받은 모든 내용을 문자열로 인식합니다. 따라서 입력받은 내용을 정수로 변환하려면
d = int(input())
와 같은 형태로 작성하거나, 나중에 변수를 사용할때
print(int(d)+2)
와 같이 int()로 감싸서 작성할 수 있습니다.
함수
함수란, 반복적으로 사용되는 코드를 일종의 틀처럼 만든 것입니다.
함수에 값을 넣으면 함수 내부에 적힌 코드에 입력 값이 적용된 결과 값을 반환해줍니다.
def 함수이름(매개변수):
실행코드
return 리턴할 값
함수이름(인수)
기본적으로 위와 같은 형식을 갖습니다.
매개변수는 여러개를 받을 수 있으며, 인수의 갯수는 매개변수의 갯수와 일치해야합니다.
return은 함수실행이 끝나면 어떠한 값을 반환해주는 명령어입니다.
return이 없을 경우, 아무것도 출력되지 않습니다.
함수이름(인수)를 입력하면 함수 실행이 가능합니다
if문
<조건> 하면, <코드>를 실행하고 싶을때 쓸 수 있는것이 바로 if문입니다.
기본적인 형태는 아래와 같습니다.
if 조건문 1:
실행 코드 1 ...
elif 조건문 2:
실행 코드 2 ...
else:
실행 코드 3 ...
해석을 하자면, 조건문 1을 충족하면 실행 코드 1을 실행하고, 그게 아닌 조건문 2를 충족하면 실행 코드 2를 실행한다.
조건문 1과 조건문 2를 모두 충족하지 않으면 실행 코드 3을 실행한다. 입니다.
elif와 else는 필수는 아닙니다.
for문
특정 코드들을 원하는 횟수 만큼 반복 시킬 때 사용하는것이 for문입니다.
for문의 기본 구조는 아래와 같습니다.
for i in 리스트(or 문자열, 튜플):
실행할 코드
리스트,문자열,튜플의 첫 글자나 요소부터 마지막 글자나 요소까지 차례대로 변수에 대입됩니다.
for문의 범위와 변수값을 숫자로 정하고 싶을때는 아래와 같이 range함수를 사용합니다.
for i in range(시작숫자,종료숫자,step):
실행할 코드
step은 얼만큼씩 변수를 증가 시킬지 정하는 것 입니다.
시작숫자와 step은 생략되어도 됩니다.
i를 사용하지 않고 코드를 반복만 하고 싶은 경우, i자리를 _(언더바)로 대체해서 사용합니다.
산술 연산자
x+y | x 더하기 y |
x-y | x 빼기 y |
x*y | x 곱하기 y |
x/y | x 나누기 y |
x//y | x 나누기 y의 몫 |
x%y | x 나누기 y의 나머지 |
x**y | x의 y제곱 |
'코딩공부 > 알고리즘' 카테고리의 다른 글
[파이썬 풀이] 백준 11720.숫자의 합 (0) | 2021.11.29 |
---|---|
[파이썬 풀이] 백준 11654.아스키 코드 (0) | 2021.11.29 |
[파이썬 풀이] 백준 4673.셀프 넘버 (2) | 2021.11.26 |
[파이썬 풀이] 백준 15596.정수 N개의 합 (0) | 2021.11.26 |
[파이썬 풀이] 백준 4344.평균은 넘겠지 (0) | 2021.11.23 |