05-18-2022 알고리즘 33~40 마지막

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

알고리즘 마지막 5일차 문제가 길어지고 이해하는데 어렵다. 시간이 너무 오래 길어져서 답안을 보고 최대한 이해하보려 한다.

  1. 로또의 최고 순위와 최저 순위
    https://programmers.co.kr/learn/courses/30/lessons/77484
def solution(lottos, win_nums):
    rank = [6,6,5,4,3,2,1]
    min = len(set(lottos)&set(win_nums))
    max = len(set(lottos)&set(win_nums))+lottos.count(0)
    return [rank[max],rank[min]]

7등이 존재하지 않기 때문에 6등을 두 개로 한다. lottos와 win_nums에서 교집합 set을 이용해 값을 저장하고 max에 0의 개수와 함께 저장한 후 다시 rank에서 찾아주면 된다.

  1. 모의고사
    https://programmers.co.kr/learn/courses/30/lessons/42840
def solution(answers):
    std1 = [1,2,3,4,5]
    std2 = [2,1,2,3,2,4,2,5]
    std3 = [3,3,1,1,2,2,4,4,5,5]
    score = [0, 0, 0]

    for i in range(len(answers)):
        if answers[i] == std1[i]:
            score[0] += 1
        if answers[i] == std2[i%8]:
            score[1] += 1
        if answers[i] == std3[i%10]:
            score[2] += 1
    
    answer = []
    for idx, num in enumerate(score):
        if num == max(score):
            answer.append(idx+1)
    
    return answer
  1. 문자열 내 마음대로 정렬하기
    https://programmers.co.kr/learn/courses/30/lessons/12915

    def solution(strings, n):
       answer = sorted(strings, key=lambda x: (x[n],x))
       return answer

    lambda를 이용해 쉽게 풀 수 있다. 답안을 봤는데 처음에 lambda가 전혀 이해가 가지 않았다. 나중에 한번 더 볼 예정..

  2. 문자열 내림차순으로 배치하기
    https://programmers.co.kr/learn/courses/30/lessons/12917

    def solution(s):
    answer = ''
    s_list = []
    for i in s:
        s_list.append(i)
    s_list.sort()
    s_list.reverse()
    answer = "".join(s_list)
    return answer

    유일하게 어렵지 않았던 문제 for를 이용해 list에 넣어주고 sort 다음 reverse 다음 다시 문자열 정렬

  3. 숫자 문자열과 영단어
    https://programmers.co.kr/learn/courses/30/lessons/81301

    def solution(s):
     answer = 0
     num= {"zero": "0", "one":"1", "two":"2","three":"3","four":"4","five":"5","six":"6",
     "seven":"7","eight":"8","nine":"9"}
     if s.isdigit():
         answer = int(s)
     else:
         for i,j in num.items():
             s = s.replace(i,j)
         answer = int(s)      
     return answer

    문제를 이해했고 풀 수 있을 거 같았으나 시간이 너무 오래 지나갔다. 할 수 없이 답안코드를 보며 공부했다. 나도 num에 key, value 설정하여 풀려고 했으나 그 다음 생각이 않나서 답안코드를 봤다. s에 숫자로만 되어있을 시 바로 s를 return해주고 아니면 for를 사용해 key,value를 받아온 다음 s를 바꾸어주었다.


    37, 39, 40번 문제는 아직 하지 못했다. 특히나 39번 시저암호 40번 신규아이디는 꽤 복잡하다. 알고리즘주가 끝났지만 알고리즘을 여기서 그만두는게 아니라 하루에 한 문제씩 꼭 풀어봐야겠다.

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

0개의 댓글