가끔 생각을 해요 ʕتʔ

🍒 프로그래머스 - 나누어 떨어지는 숫자 배열

문제

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.

divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

 

  • 제한사항
    arr은 자연수를 담은 배열입니다.
    정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
    divisor는 자연수입니다.
    array는 길이 1 이상인 배열입니다.
  • 입출력 예
arr divisor return
[5, 9, 7, 10] 5 [5, 10]
[2, 36, 1, 3] 1 [1, 2, 3, 36]
[3,2,6] 10 [-1]

 

풀이

def solution(arr, divisor):
    answer = []
    for i in arr:
        if i % divisor == 0:
            answer.append(i)
    return sorted(answer) if answer else [-1]

# arr에 있는 요소만큼 반복
# i가 divisor로 나누어떨어진다면 answer에 넣기
# answer 오름차순으로 정렬해서 리턴 (만약 answer에 요소가 없다면 [-1] 리턴)

다른 사람의 풀이

def solution(arr, divisor): return sorted([n for n in arr if n%divisor == 0]) or [-1]

 

🍒 프로그래머스 - 행렬의 곱셈

문제

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

 

  • 제한사항
    행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
    행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
    곱할 수 있는 배열만 주어집니다.
  • 입출력 예
arr1 arr2 return
[[1, 4], [3, 2], [4, 1]] [[3, 3], [3, 3]] [[15, 15], [15, 15], [15, 15]]
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

 

풀이

def solution(arr1, arr2):
    answer = []
    for i in range(len(arr1)):
        row = []
        for j in range(len(arr2[0])):
            total = 0
            for k in range(len(arr1[i])):
                total += arr1[i][k] * arr2[k][j]
            row.append(total)
        answer.append(row)
    return answer

# arr1의 행을 순회하는 반복문
# 각 행에 대한 결과를 저장할 빈 리스트 row
# arr2의 열을 순회하는 반복문
# 곱셈 결과를 저장할 변수 total
# 행렬 곱셈을 위해 arr1[i]의 각 요소와 arr2의 각 요소를 곱함
# 현재 위치의 요소를 total에 더함, 곱셈 결과인 total을 row 리스트에 추가
# row 리스트를 answer 리스트에 추가

다른 사람의 풀이

def productMatrix(A, B):
    return [[sum(a*b for a, b in zip(A_row,B_col)) for B_col in zip(*B)] for A_row in A]

# zip(*B): B 행렬의 열을 기준으로 행렬을 전치시킴. 즉, B의 각 행이 B의 각 열이 됨
# 바깥쪽 리스트 컴프리헨션: A 행렬의 각 행에 대해 반복
# 안쪽 리스트 컴프리헨션: B 행렬의 각 전치된 열과 A 행렬의 각 행을 요소별로 곱하고 그 값을 더함
# sum(a * b for a, b in zip(A_row, B_col)): 현재 처리 중인 A 행렬의 행과 B 행렬의 전치된 열의 요소별 곱셈의 합을 계산
# 각 항목별 곱셈의 합으로 이루어진 행렬을 반환

 

🍒 TIL

 

  • or [-1] -> False면 [-1]을 리턴
  • 주어진 이차원 리스트 B를 언패킹하여 각 행을 개별적인 인자로 전달하고, zip 함수를 사용하여 열로 묶어서 튜플로 반환! 전치행렬 구할 때 참고해야겠다.

공유하기

facebook twitter kakaoTalk kakaostory naver band