본문 바로가기
알고리즘 풀이

[알고리즘] 프로그래머스 | 하샤드 수, 나누어 떨어지는 숫자 배열, 행렬의 덧셈

by 째깍단 2023. 8. 5.

하샤드 수

https://school.programmers.co.kr/learn/courses/30/lessons/12947

 

답: 

더보기
def solution(x):
    numlist = list(map(int, str(x)))
    num = sum(numlist)
    if x % num == 0:
        return True        
    return False

 

한줄 코딩 / 리스트 컴프리헨션

def solution(x):
    return True if x % sum(list(map(int, str(x)))) == 0 else False

 

 

문제 분석 및 해석

 

x 자리수를 더해서 스스로를 나누었을때 나누어 떨어지는 수 구하기

 

 

>> 풀이생각

x자리 수를 list로 뽑아내기 (map()활용)

각 자리수를 더하고 그 수로 x를 나누기

 

 

 


나누어 떨어지는 숫자 배열

 

https://school.programmers.co.kr/learn/courses/30/lessons/12910

 

답:

더보기
def solution(arr, divisor):
    answer = []
    for a in arr:
        if a % divisor == 0:
            answer.append(a)
    if answer: 
        return sorted(answer)
    return [-1]

 

한줄 코딩 / 리스트 컴프리헨션

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

 

 

문제 분석 및 해석

 

array의 요소를 divisor로 나누어 나머지가 0인 값을 담은 array을 return

아무것도 없을때는 [-1] return

 

*** sort() vs sorted()

  • sort() 와 sorted()sorted()는 정렬된 새로운 리스트를 만들어주며, 바로 사용할 수 있다.
  • sort()는 리스트 자체를 변경, 매개변수에 저장하여 불러서 사용해야한다

 

 

오류가 있었던 과정

 

-1을 먼저 걸러내어 효율적으로 만들고자 했는데, 하나라도 있는 식이 아니어서 오류가 났다.

쉬운 문제라고 대충 읽었던 것이 문제를 발생시킨 듯..

    for a in arr:
        if a % divisor != 0: 
        #하나라도있는것 아니고 하나도 없는 것이므로 -1을 걸러내는 식이 마지막으로 가야함!
            return [-1]

 

 

 


행렬의 덧셈

https://school.programmers.co.kr/learn/courses/30/lessons/12950

 

답: 

더보기
def solution(arr1, arr2):
    answer = []
    """각 자리수를 찾아서 더해주기"""
    for i in range(len(arr1)):
        array = []
        for a in range(len(arr1[i])):
            array.append(arr1[i][a] + arr2[i][a])
        answer.append(array)        
    return answer

 

 

문제 분석 및 해석

 

행렬 arr1, arr2 행과 열을 각각 더한 행렬을 return

 

answer = arr1 + arr2
단순히 더할 경우 합쳐진 행렬이 될뿐!
[[1,2],[2,3],[3,4],[5,6]]

 

>> 각 자리를 불러서 더해주어야한다

 

 

 

과정1.

 

array를 밖에다 둘 경우 arr1에 포함된 모든 식이 안에 들어간 결과가 출력된다

[[4, 6, 7, 9], [4, 6, 7, 9]]

 

array = []
for i in range(len(arr1)):
    for a in range(len(arr1[i])):
        array.append(arr1[i][a] + arr2[i][a])
        if len(array) == len(arr1[i]):
            answer.append(array)        
    answer.append(array)

 

따라서 array = []를 for문 안으로 옮겨 식을 구현하였다

 

 


느낀점: 문제를 꼼꼼히 읽는 습관을 들이자