728x90
반응형

1065번 문제

등차수열을 갖고 있는 수를 구하라는 문제이다.

1. ex) 135 ==> 등차수열을 갖고있는 수

        12 ==> 등차수열 갖고있는 수

        3  ==> 등차수열 갖고있는 수

 

보다시피 100미만의 자연수는 등차수열을 갖고있다. 따라서 고려할때 3자리수 이상의 자연수만 고려 하면 좋을거 같다.

 

import sys

while True:
    N = int(sys.stdin.readline())
    if N<0 or N>200000:
        print("N값은 1000보다 작거나 같은 자연수입니다.")
    else:
        break

def solution(n):
    total = 0
    for i in range(N):
        d = [] #내가 새로 만들 등차수열 출력할 리스트
        b = list(str(i+1)) #i+1을 하는 이유?===> range(N)의 경우 0부터 출력되기때문
        #b = ['1'] ['1' , '5'] ''''' ==> 이런식으로 하나 하나씩 b객체에 저장된다.
        c = list(map(int,b))  #c 객체에 b객체에 있는 값을 int형 처리해준다.
        for j in range(len(c)): #c 객체의 길이 c의 형태는 c = [1] [4 , 5] [1 5 6] 이런식으로 되어있다.
            if len(c)<=2: #두자리수이하의 자연수는 모두 등차수열을 갖는 '한수' 이다.
                total+=1 #따라서 갯수를 모두 더해준다.
                break#break을 통해 더 볼것도 없이 그냥 반복문 나온다.
            else: 
                su, n ,n2= 0, 0 , 0
                n = c[1] - c[0]  
                n2 = c[1] - n 
                su = n*j + n2 #등차수열의 식이다.
                d.append(int(su)) #내가 새로 만든 등차수열 리스트 d 에 추가한다.
                #d = [1,0,-1]
                if c == d: #만약에 c , 즉 1부터 N까지 주르륵 만든 리스트값이 d와 동일하다면 
                    total+=1 #total로 더해준다.
    return total
print(solution(N))

한수 결과값

★중요 포인트★

 1. 등차수열을 구하는 새로운 나의 리스트와 1000까지 출력한 리스트 c와 같으면 total값을 증가시켜 갯수를 더한다.

2. c = list(map(int,b)) ==> b리스트의 값들을 정수로 바꾼다!

3. 알고리즘 순서 : 

    1) N까지의 리스트를 b에 1을 더한값으로 string 형태로 생성시킨다.

    2) 이 b리스트의 요소들의 값을 map함수를 활용하여 int형으로 변환시킨다.

    3) c리스트의 요소들의 길이만큼 반복문을 실행시킨다.

    4) c리스트의 요소들의 길이가 2이하라면 total값을 1씩 증가시킨다.

    5)c리스트의 요소들의 길이가 3이상이라면 c리스트의  

        인덱스 1번(c[1])과 0번(c[0]) 을 뺀값 = n

        인덱스 1번(c[1]) 과 n을 뺀값 = n2

        등차수열 = n * j(c리스트의 인덱스값을 range값으로 처리) + n2 가 된다.

   ex> 2 7 12 17 22 ==> 7-2 = n , 7-n = n2 ==> n=5 n2=2 ==> 5*j + 2(j는 인덱스 0부터) 가된다는 것을 알 수 있다.

 

     6) 이를 나만의 임의의 d리스트에 이 임의의 등차수열의 값들을 저장하게 된다.

  ex>

  1.

        b =['1','4','6'] c =[1,4,6] 

        n = 4-1 = 3

        n2 = 4- 3 = 1

        su = 3*j +1

        .

        .

        .

        d = [1,4,7] <==c리스트와 다르다!!!

        

 

2.

        b =['1','4','7'] c =[1,4,7]

        n = 4-1 = 3

        n2 = 4- 3 = 1

        su = 3*j +1

        .

        .

        .

        d = [1,4,7] <==c리스트와 같다!!!

        total+=1

     7) 이 c리스트가 d리스트안에 있는 리스트와 동일하다면 total값을 1씩 더해준다.

728x90
반응형

'Python(백준) > 함수' 카테고리의 다른 글

[Python][백준] 1065번: 한수  (0) 2022.09.14
[Python] 백준 15596번 정수 N개의합  (0) 2022.09.14

+ Recent posts