1. X 만큼 간격이 있는 N개의 숫자
# x만큼 간격이 있는 n개의 숫자

# my_code
def number_generator(x, n):
    answer = []
    first_x = x
    for i in range(n):
        answer.append(x)
        x += first_x
        
    return answer

# simple_code
def number_generator(x, n):
    # 함수를 완성하세요
    return [i * x + x for i in range(n)] # 컴프리 핸션
print(number_generator(2, 5))

# 실행결과
# [2, 4, 6, 8, 10]
  1. 행렬의 덧셈
# simple_code

def solution(arr1, arr2): 
# 함수의 파라미터로 배열 1과 2를 받음
    answer = arr1
    

    for i in range(len(arr1)): 
    # 배열 1의 크기까지 반복(행 설정)
        for j in range(len(arr1[i])): 
        # 배열 1 행의 크기까지 반복(열 설정)
            answer[i][j] = arr1[i][j] + arr2[i][j]

    return answer # 결과 값을 반환

# simple_code
def solution(arr1, arr2): 
    return [[j+y for j,y in zip(i,x)] for i,x in zip(arr1,arr2)]
#i = [1,2],[2,3]
#j = [3,4],[5,6]
#(컴프리 핸션)

#a, b == zip(i, j)
#zip(i,j) [[1,3],[2,4]],[[2,5],[3,6]]

# 행렬의 덧셈
  1. 핸드폰 번호 “*” 를 이용하여 가리기
# my_code

def solution(phone_number):
    final_hidden = ' '
    hidden = len(phone_number)
    final_hidden = "*" * (hidden - 4)
    result = final_hidden + phone_number[-4:] 
    # [-4:] 뒤에서 네 번째 자리까지 표현 ,[1:]앞의 첫번째 자리 제외하고 표현 
    return result

# simple_code
def hide_numbers(s):
    return (len(s) - 4) * '*' + s[-4:]

# 핸드폰 번호 "*"으로 가리기
  1. 하샤드 수

주어진 진법에서 그 수의 각 자릿수 숫자의 합으로 나누어떨어지는 자연수

# wrong_code

def solution(x):
    one_number = x % 10
    ten_number = (x % 100) // 10 
    hundred_number = (x % 1000) // 100 
    thousond_number = x % 1000 // 1000 
    
    if(x >= 1000):
        is_hashad = thousond_number + hundred_number + ten_number + one_number
    elif(x >= 100):
        is_hashad = hundred_number + ten_number + one_number
    elif(x >= 10): 
        is_hashad = ten_number + one_number
    else:
        is_hashad = one_number
    # 자릿수에 따라 하샤드 수 계산 법을 나눔
    
    if(x % is_hashad == 0):
        return True
    else:
        return False
    # 정확한지 검사

# my_code

def solution(x):
    arr = list(str(x))
    sum = 0
    
    for i in range(len(arr)):
        sum += int(arr[i])
        
    if(x % sum == 0):
        return True
    else:
        return False

# simple_code  
def Harshad(n):
    # n은 하샤드 수 인가요?
    return n % sum([int(c) for c in str(n)]) == 0

# 하샤드 수
  1. 평균 구하는 문제
# my_code
def solution(arr):
    answer = sum(list(arr)) / len(list(arr))
    return answer

# simple_code
def average(list):
    return (sum(list) / len(list))

# 평균 구하는 문제
  1. 콜라츠 추측

임의의 자연수가 다음 조작을 거쳐 항상 1이 된다는 추측

  1. 짝수라면 2로 나눈다.
  2. 홀수라면 3을 곱하고 1을 더한다.
  3. 1이면 조작을 멈추고, 1 이 아니면 첫 번째 단계로 돌아간다.
# my_code
def solution(num):
    num_count = 0 # 숫자 세는 거 초기화 
    
    while num != 1:
        num_count += 1
        # 반복문 돌 때마다 횟수에 1추가    
        if num % 2 == 0:
            num = num / 2
        # 짝수 일 경우 2로 나눔 
        else:
            num = num * 3 + 1
        # 홀수 일 경우 3곱하고 1더함
        if num_count >= 500:
            return -1
        # 횟수가 500이 넘을경우 -1 값 반환
    return num_count

# simple_code
def collatz(num):
    for i in range(500):
        num = num / 2 if num % 2 == 0 else num*3 + 1
        if num == 1:
            return i + 1
    return -1
  
# 콜라츠 추측