05-17-2022 알고리즘 25~32

·2022년 5월 17일
0
post-custom-banner

알고리즘 4일차 level.1 임에도 불구하고 점점 어려워진다. 문제를 이해하는 것도 어려워지고 시간도 길어지며 오류가 잦아졌다. 또 코드실행에서는 문제가 없이 통과되지만 제출하기를 누르면 실패가 뜬다.
할 수 없이 앞으로 40번 문제까지는 너무 어렵지않고 내 수준의 답안을 검색하고 보고 최대한 이해해보려 한다.

  1. 제일 작은 수 제거하기
    https://programmers.co.kr/learn/courses/30/lessons/12935
def solution(arr):
    if len(arr) <= 1:
        arr = [-1]
    else:
        arr.pop(arr.index(min(arr)))
    return arr

나는 del을 이용해 제거하려 했지만 제출하기 실패로 떳다. 위 코드는 arr len이 1일 때 -1를 넣어주고 아닐 시 arr에 pop을 이용하고 index로 arr에 min을 받아와 처리해줬다.

  1. 콜라츠 추측
    https://programmers.co.kr/learn/courses/30/lessons/12943
def solution(num):
    answer = 0
    while num != 1:
        if num % 2 == 0:
            num = num // 2
        else:
            num = 3*num+1     
        answer += 1
        if answer > 500:
            answer = -1
            break
            
    return answer
function solution(num) {
   var answer = 0;
   while(num != 1){
       if(num % 2 ==0){
           num = num /2
       }
       else{
           num = 3*num+1
       }
       answer += 1
       if(answer >500){
       answer = -1
       break
       }
   }   
   return answer;
}

위 문제는 어떻게 꾸역꾸역 풀어봤다. 맨 처음 while을 사용하는 법이 생각나지 않아 시간을 엄청 보냈다. while이 끝나면 answer에 +1 을 해주고 500이상 될 시 탈출후 return 해주는 코드다.

  1. 하샤드 수
    https://programmers.co.kr/learn/courses/30/lessons/12947
def solution(x):
    answer = True
    sum_num = 0
    for i in str(x):
        sum_num+=int(i)
    if x%sum_num == 0:
        answer
    else:
        answer = False
    return answer

유일하게 어렵지 않았던 문제


  1. 삼진법 뒤집기
    https://programmers.co.kr/learn/courses/30/lessons/68935
    위 문제는 왠지 풀 수 있을거 같아서 내일 한번 풀어보겠음


  2. 최소 직사각형
    https://programmers.co.kr/learn/courses/30/lessons/86491

def solution(sizes):
    l = []
    s = []
    for i in range(len(sizes)):
        if sizes[i][0] >= sizes[i][1]:
            l.append(sizes[i][0])
            s.append(sizes[i][1])
        else:
            l.append(sizes[i][1])
            s.append(sizes[i][0])
            
    answer = max(l) * max(s)
    return answer

문제를 이해하는데 많이 어려웠다. 답안을 보니 너무 간단하더라.

  1. 같은 숫자는 싫어
    https://programmers.co.kr/learn/courses/30/lessons/12906?language=javascript

    def solution(arr):
       answer = []
       preValue = -50
       for i in arr:
           if preValue != i:
               answer.append(i)
           preValue = i;
       return answer
       print('Hello Python')
       return answer

    처음 접할 때 문제를 이해하는데 시간을 많이 썼다. arr 첫 번째 요소를 받아온 다음 그 값을 저장해주고 다시 그 값과 arr 두 번째 요소와 비교 같지 않을 때만 answer에다 넣어준다.

  2. 두개 뽑아서 더하기
    https://programmers.co.kr/learn/courses/30/lessons/68644

    def solution(numbers):
       answer = []
       for i in range(len(numbers)-1):
           for j in range(i+1,len(numbers)):
               n = numbers[i]+numbers[j]
               if n not in answer:
                   answer.append(n)
    
       answer.sort()
       
       return answer

    2중 for가 나오면 헷갈린다. 더 공부하자


    이제 문제의 난이도가 높아졌다. 1~2일차에는 그래도 그럭저럭 풀 수 있는 문제가 많았는데 이제는 문제를 이해하는 것도 버겁다. 시간도 오래걸리고 코드제출에 실패도 많이 뜬다.
    알고리즘을 다시 공부할까 아니면 답안을 보고 이해할까 고민이 많다. 화이팅

profile
Life is a natural-nine
post-custom-banner

0개의 댓글