연인 코니와 브라운은 광활한 들판에서 ‘나 잡아 봐라’ 게임을 한다. 이 게임은 브라운이 코니를 잡거나, 코니가 너무 멀리 달아나면 끝난다. 게임이 끝나는데 걸리는 최소 시간을 구하시오.
표준 입력의 첫 줄에 코니의 위치 C와 브라운의 위치 B를 공백으로 구분하여 순서대로 읽는다.
브라운이 코니를 잡을 수 있는 최소시간 N초를 표준 출력한다. 단 브라운이 코니를 잡지 못한 경우에는 -1을 출력한다.
입력: 11 2
출력: 5
import sys
from collections import deque
if __name__ == '__main__':
c, b = map(int, input().split())
MAX = 200001
dQ = deque()
dQ.append(b)
L = 1
while dQ and c < MAX:
c += L
size = len(dQ)
for _ in range(size):
now = dQ.popleft()
for next in (now-1, now+1, 2*now):
if 0 <= next < MAX:
dQ.append(next)
if next == c:
print(L)
sys.exit(0)
L += 1
else:
print(-1)
점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다.
전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.
n | lost | reserve | return |
---|---|---|---|
5 | [2, 4] | [1, 3, 5] | 5 |
5 | [2, 4] | [3] | 4 |
3 | [3] | [1] | 2 |
예제 #1 1번 학생이 2번 학생에게 체육복을 빌려주고, 3번 학생이나 5번 학생이 4번 학생에게 체육복을 빌려주면 학생 5명이 체육수업을 들을 수 있습니다.
예제 #2 3번 학생이 2번 학생이나 4번 학생에게 체육복을 빌려주면 학생 4명이 체육수업을 들을 수 있습니다.
def solution(n, l, r):
reserve = set(r) - set(l)
lost = set(l) - set(r)
answer = n - len(reserve) - len(lost) # init
for v in reserve:
if v-1 in lost:
answer += 2
lost.remove(v-1)
elif v+1 in lost:
answer += 2
lost.remove(v+1)
else:
answer += 1
return answer
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/64061
def solution(board, moves):
stack = list()
cnt = 0
for v in moves:
x = v -1
for y in range(len(board)):
if board[y][x] != 0:
if stack and stack[-1] == board[y][x]:
stack.pop()
cnt += 2
else:
stack.append(board[y][x])
board[y][x] = 0
break
return cnt