Day20  함수(메서드)

  • 배열의 길이를 2의 거듭제곱으로 만들기
  • 배열 비교하기
  • 문자열 묶기
  • 배열의 길이에 따라 다른 연산하기
  • 뒤에서 5등까지

배열의 길이를 2의 거듭제곱으로 만들기

문제 설명

정수 배열 arr이 매개변수로 주어집니다. arr의 길이가 2의 정수 거듭제곱이 되도록 arr 뒤에 정수 0을 추가하려고 합니다. arr에 최소한의 개수로 0을 추가한 배열을 return 하는 solution 함수를 작성해 주세요.

 

def solution(arr):
    int2 = [2**i for i in range(0, 12)]

    while len(arr) not in int2:
        arr.append(0)

    return arr

2의 정수 거듭제곱을 int2에 담아두고

arr의 길이가 정수 거듭제곱과 일치할 때까지 0을 arr에 append


배열 비교하기

문제 설명

이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.
1. 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
2. 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.

두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.

 

def solution(arr1, arr2):
    answer = 0
    
    if len(arr1) == len(arr2):
        if sum(arr1) > sum(arr2): return 1
        elif sum(arr1) < sum(arr2): return -1
        else: return 0
                    
    return 1 if len(arr1) > len(arr2) else -1

두 배열의 길이가 다를 때 1 or -1 뿐이니 비교 후 바로 return

두 배열의 길이가 같을 때는 1 or -1 or 0로 3가지 경우가 나오니 if elif else로 비교 후 return


문자열 묶기

문제 설명

문자열 배열 strArr이 주어집니다. strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요.

제한사항

def solution(strArr):
    answer = 0 
    count = [0] * 31
    for i in strArr:
        count[len(i)] += 1
    return max(count)

원소의 길이의 개수를 저장할 count 배열을 0으로 채워서 만든 후

원소의 길이를 각 배열에 인덱스와 매칭해서 +1씩 더함

처음에 count 배열을 [0] * 30로 해서 계속 실패했음 인덱스는 0부터고 최대길이는 30이니

길이가 30일 때 count[31]에 카운팅되어야 하므로 31까지 생성해주는게 맞음


배열의 길이에 따라 다른 연산하기

문제 설명

정수 배열 arr과 정수 n이 매개변수로 주어집니다.
arr의 길이가 홀수라면 arr의 모든 짝수 인덱스 위치에 n을 더한 배열을,
arr의 길이가 짝수라면 arr의 모든 홀수 인덱스 위치에 n을 더한 배열을 return 하는 solution 함수를 작성해 주세요.

 

def solution(arr, n):
    start = 0 if len(arr) % 2 == 1 else 1
    for i in range(start, len(arr), 2):
        arr[i] += n
    return arr

 

+2씩 증가시키니 start 값에 따라 짝수 인덱스에 더할지, 홀수 인덱스에 더할지가 결정됨, 

포문의 start값을 arr의 길이가 홀수일 때 0, 짝수일 때 1로 지정


뒤에서 5등까지

문제 설명

정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
def solution(num_list):
    answer = sorted(num_list)
    return answer[:5]

정렬 후 5개 슬라이싱

def solution(num_list):
    return sorted(num_list)[:5]​

한 줄이라도 코드 줄이기 


주제가 며칠동안 배열, 리스트였었는데 오늘은 새로운 주제인 함수가 등장했다

어제 어떤 블로그에서 코드를 치면서 계속 고민하는게 아니라 적으면서 답을 찾은 후 코드는 짧게 끝내는 것이라고 했다

그래서 오늘은 끄적이면서 먼저 답을 찾은 후 코드를 쳤는데 뭔가 머릿속으로 정리가 되면서 답을 찾은 느낌이라 더 잘풀리는 듯 했다. 오늘 코드들이 길지는 않은데 헷갈리는 부분들이 있어서 생각보다 오래걸리기도 했지만 그래도 오늘도 성공~

작은 성취감들이 나를 더 단단하게 만든다 후후 20일차 돌파 !!! 

+ Recent posts