[TIL]_2025.02.28 본캠프 12일차 (2): 코드카타 Python

JIYUU·2025년 2월 28일

37번. 행렬의 덧셈
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

def solution(arr1, arr2):
    return [[a + b for a,b in zip(a1, a2)] for a1, a2 in zip(arr1, arr2)]

행렬의 같은 위치에 있는 요소들끼리의 합산이므로 각 행렬의 요소들을 연산하기 위해서 zip을 사용했다.

38번. 직사각형 별찍기
이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.

a, b = map(int, input().strip().split(' '))
for i in range(1, b+1):
    print('*' * a)
# 다른 사람들의 풀이 중, for문 없이 하는 법

a, b = map(int, input().strip().split(' '))
answer = ('*'*a +'\n')*b
print(answer)

39번. 최대공약수와 최소공배수
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

def solution(n, m):
    n, m = min(n, m), max(n, m) 	# 뒤가 더 큰수라고 고정
    for i in range(n, 0, -1): 		# n 부터 1까지 거꾸로 반복하면서
        if n % i == 0 and m % i == 0:	# n과 m의 최대공약수 찾기
            gcd = i
            break
            
    lcm = (n * m) // gcd 		# 최소공배수 공식사용
    return [gcd, lcm]

근데 이걸 lambda로 표현한 천재적인 코드가 있다.....진짜 벽을 느낀다 오늘도

 
def solution(n, m):
    gcd = lambda a,b : b if not a%b else gcd(b, a%b) 
    # a%b == 0이 아니면 a에 b를 넣고 b에 a%b (a를 b로 나눈 나머지)를 다시 넣는 걸 반복하는..하... 이게 내가 위에서 쓴거다...
    lcm = lambda a,b : a*b//gcd(a,b)
    return [gcd(n, m), lcm(n, m)]

0개의 댓글