TIL No.18: Python - 알고리즘 문제.

BLAKE KIM·2020년 7월 12일
0

K번째수

내 코드

def solution(array, commands):
    answer = []
    for i in commands:
        list1 = array[i[0]-1:i[1]]
        list1.sort()
        answer.append(list1[i[2]-1])
    return answer

다른 사람의 풀이

def solution(array, commands):
    return list(map(lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1], commands))
  • 하나씩 꺼내서 어떤 연산이나 작업을 해야할 때는 map함수를 생각해보고 그 작업을 간단히 쓰기 위해서는 lambda를 생각하자.

모의고사

내 코드

def solution(answers):
    answer1 = [1,2,3,4,5]
    answer2 = [2,1,2,3,2,4,2,5]
    answer3 = [3,3,1,1,2,2,4,4,5,5]
    count = [0,0,0]
    for i in range(len(answers)):
        if answers[i] == answer1[i%len(answer1)]:
            count[0] += 1
        if answers[i] == answer2[i%len(answer2)]:
            count[1] += 1
        if answers[i] == answer3[i%len(answer3)]:
            count[2] += 1
    
    return [i+1 for i in range(3) if max(count) == count[i]]
  • 딱히 다른 사람 풀이를 가져올 만한 것은 없었음. enumerate()사용한 풀이가 꽤 있었음.

체육복

내 코드

def solution(n, lost, reserve):
    plus = 0
    end = []
    for i in lost:
        if i in reserve:
            plus += 1
            end.append(i)
            reserve.remove(i)
            
    for i in lost:
        if (i-1) in reserve and i not in end:
            plus += 1
            reserve.remove(i-1)
        elif (i+1) in reserve and i not in end:
            plus += 1
            reserve.remove(i+1)
            
    return n - len(lost) + plus

다른 사람의 풀이

def solution(n, lost, reserve):
    _reserve = [r for r in reserve if r not in lost]
    _lost = [l for l in lost if l not in reserve]
    for r in _reserve:
        f = r - 1
        b = r + 1
        if f in _lost:
            _lost.remove(f)
        elif b in _lost:
            _lost.remove(b)
    return n - len(_lost)
  • 나와 비슷한 방식이지만 처음부터 겹치는 수를 제외한 list를 새롭게 만들고 조건을 거는 방식 또한 내 코드보다 훨씬 간결하다. list comprehension을 보다 편하게 사용해서 주어진 list로 새로운 배열을 쉽게 변형할 생각도 가져보자.
lostN = list(set(lost) - set(reserve))
reserveN = list(set(reserve) - set(lost))
  • 새로운 list를 만드는 방식으로 set함수를 이용한 차집합 개념도 알아두자.
profile
BackEnd

0개의 댓글