[python] 개미수열

김보나·2022년 9월 23일
0

coding-test

목록 보기
2/2

python으로 개미수열을 만들어보는 알고리즘 공부를 해봤다.
개미수열이란

1
11
12
1121
122111

와 같은 형태로 1부터 시작해서 앞에 숫자가 몇개인지 나타내는 수열인데 수열 자체를 이해하는데 오래 걸렸다.

첫번째 항은 1로 시작한다.
두번째 항은 첫번째 항이 1이 한개이므로 11이다.
세번째항은 1이 두개이므로 12이다.
네번째항은 1이 하나이고 2가 하나이므로 1121이다.
다섯번째 항은 1이 2개고 2가 하나고 2가 하나,
그 다음에 오는 1이 하나이므로 12 21 11 이 된다.

이런 식으로 늘어나는게 개미수열이다.


재귀함수로도 짤 수 있을것 같은데
아직 나의 실력으로는 처음부터 구현하기가 어려워서
관련 레퍼런스를 찾아봤다.

반복문을 사용해서 푸는 예제이다.

#몇개의 수열을 만들것인지 숫자를 정한다.
MAX_LOOP = 5

def get_length(num_str):
	#첫번째 숫자를 first_char에 넣어준다.
    first_char = num_str[0]
    #num_str의 길이만큼 반복해준다.
    for i in range(len(num_str)):
    	#숫자가 같지 않으면 숫자를 리턴하고
        if num_str[i] != first_char:
            return i
        #숫자가 같다면 길이를 리턴한다.
    return len(num_str)


def solve(num_str):
    new_str=""
    start=0
    
    #num_str의 길이만큼 반복해준다.
    while start<len(num_str):
    	#get_length를 num_str의 길이만큼 반복해준다.
        length = get_length(num_str[start:])
        #기존 숫자와 get_length로 얻은 숫자를 합쳐준다.
        new_str += num_str[start] + str(length)
        #시작 길이를 늘려준다.
        start += length
        #최종 수열을 리턴한다.
    return new_str


num_str='1'
for i in range(MAX_LOOP):
    print(num_str)
    num_str=solve(num_str)

이런식으로 풀 수 있겠다.

아직은 이런 알고리즘이 어렵지만,,,,,
나보다 잘한사람들의 코드를 보면서 열심히 공부해야겠다고
오늘도 다짐...!


레퍼런스

profile
우주최강 개발자가 될 때까지😈

0개의 댓글