문제
HOW TO SOLVE
- 회전하는 큐 : 단순 구현
- 내 선물을 받아줘 2 : 단순 구현
- 전공책 : DFS + 백트래킹 (답 참고 + 다시 풀자.. )
- ACM Craft : 아직 안 품
회전하는 큐
'''
- 양방향으로 입/출력이 가능한 큐를 구현하는 것이 핵심
- 덱을 사용하면 양방향 입/출력이 가능하다.
- 왼쪽 이동 / 오른쪽 이동이 가능
- 주어진 원소의 위치를 뽑아내는데 드는 연산의 최솟값 구하기
- 덱에서 현재 원소의 위치를 구한다.
- 현재 원소의 왼쪽과 오른쪽에 있는 원소들의 개수 중 작은 것을 선택해서 2 or 3번 연산 수행
'''
from collections import deque
n, m = map(int, input().split())
indexes = list(map(int, input().split()))
q = deque([i for i in range(1, n + 1)])
cnt = 0
for index in indexes:
if q[0] == index:
q.popleft()
else:
left = q.index(index)
right = len(q) - left
if left <= right:
for _ in range(left):
q.append(q.popleft())
cnt += 1
q.popleft()
else:
for _ in range(right):
q.appendleft(q.pop())
cnt += 1
q.popleft()
print(cnt)
내 선물을 받아줘 2
'''
- 구사과의 초기 위치와 관계없이 선물을 주는 방법
- 최소 몇 개의 칸 위에 선물을 놓으면, 구사과가 항상 선물을 가져가는가?
- E : x + 1 / W : x - 1
'''
n = int(input())
graph = list(input())
cnt = 0
for i in range(len(graph) - 1):
if graph[i] == 'E' and graph[i + 1] == 'W':
cnt += 1
print(cnt)
전공책
from collections import Counter
'''
- 단어 T를 만들기 위해서 선택해야 하는 전공책의 가장 적은 가격의 합 구하기
'''
def helper(index, _sum):
global _min
if index == n:
if can_make_t():
_min = min(_min, _sum)
return
for x in _list[index][1]:
alpha_count[ord(x) - ord('A')] += 1
helper(index + 1, _sum + int(_list[index][0]))
for x in _list[index][1]:
alpha_count[ord(x) - ord('A')] -= 1
helper(index + 1, _sum)
def can_make_t():
for i in range(26):
if alpha_count[i] < t_count[i]:
return False
return True
t = input()
n = int(input())
_list = []
alpha_count = [0] * 26
t_count = [0] * 26
_min = int(1e9)
for i in t:
t_count[ord(i) - ord('A')] += 1
for _ in range(n):
c, w = input().split()
_list.append((c, w))
helper(0, 0)
print(_min if _min != int(1e9) else -1)
ACM Craft