최대 사과의 개수
제한된 박스 수 중 이미 실은 박스의 수를 세기 위한 nbox라는 변수 생성했습니다!
먼저 입력받은 리스트를 사과의 개수인 x[1]과 박스의 개수인 x[0]을 기준으로 정렬하였습니다.
이후, 더 실을 수 있는 박스의 개수(limit-nbox)보다 현재 위치한 박스 종류의 개수가 더 작으면 사과의 개수에 box[i][1] x box[i][0]을 해주었으며 그렇지 않은 경우에는 더 실을 수 있는 박스의 개수 만큼 현재 위치한 박스 종류의 사과 개수를 box[i][1] x (limit-nbox) 더해주었습니다.
def solution(box, limit):
answer = 0
nbox=0
box.sort(key=lambda x: (-x[1],-x[0]))
for i in range(len(box)):
if box[i][0]<=limit-nbox:
answer+=box[i][1]*box[i][0]
nbox+=box[i][0]
else:
answer+=box[i][1]*(limit-nbox)
nbox+=box[i][0]
break
return answer
공주 구하기
공주 구하기 문제는 deque를 이용하였습니다.
만약 3을 외친 왕자가 제외된다고하면 1,2를 외친 왕자까지는 꼬리에 다시
붙어야합니다. 그래서 for i in range(k-1)을 사용하여 제외 될 숫자를 외친 왕자 전의 왕자까지 queue.popleft()를 한 후 queue에 다시 append해줍니다. 바로 다음은 제외될 왕자이므로 for문 밖에서 popleft를 해줍니다.
계속 반복한 후 queue의 개수가 1이 되면 그 수를 return 해주면, 공주를 구하러 갈 왕자의 번호를 출력하게 됩니다.
from collections import deque
def solution(n, k):
answer = 0
prince=range(1,n+1)
queue=deque(prince)
while queue:
for i in range(k-1):
queue.append(queue.popleft())
queue.popleft()
if len(queue)==1:
answer=queue.popleft()
return answer
이진수 정렬
먼저 이진수로 바꿔주기 위해 format함수를 사용하였습니다. 그리고 이진수에서 1의 개수를 세기 위하여 for문을 이용하였고, answer이라는 공리스트에
[10진수,2진수에서의 1의 개수]의 형태로 append해주었습니다.
그러고 난 후 answer 리스트를 1의 개수, 10진수 값을 오름차순으로 정렬한 후 10진수 값을 출력하는 코드를 짜보았습니다.
def solution(nums):
answer = []
for i in nums:
a=0
for j in format(i,'b'):
if j=='1':
a+=1
answer.append([i,a])
answer.sort(key = lambda x: (x[1],x[0]))
result=[]
for i in answer:
result.append(i[0])
return result
연속된 문자 지우기
def solution(s):
stack=[]
for i in s:
if len(stack)==0:
stack.append(i)
else:
if i!=stack[-1]:
stack.append(i)
else:
stack.pop()
return ''.join(stack)
Backspace
def solution(s):
stack = []
for x in s:
if x == '#':
if len(stack) > 0:
stack.pop()
else:
stack.append(x)
return "".join(stack)
이진탐색
def solution(nums, target):
answer=-1
right=len(nums)-1
left=0
while left<=right:
mid=(left+right)//2
if nums[mid]==target:
return mid
elif nums[mid]<target:
left=mid+1
else:
right=mid-1
return answer