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함수를 이용한 차집합 개념도 알아두자.