오늘은 Week 2의 시험과 새로운 발제가 나오는 날입니다. 그렇기 때문에 9시 와서 코드들을 복습하고, 10시에 시험을 치뤘습니다. 이후 서로의 코드를 보고 리뷰를 하며 식사하고 돌아와 코치님의 발제를 들었습니다.

13:00 ~
새로운 3주차 발제가 있다.
코치님이 하실 말씀은…
좀더 깊게 이해해야합니다. 문제 푸는 것보다 개념을 깊게 파야만 할 것 같습니다…
특히나 다음주차 그래프는 개념이 굉장히 중요합니다.
오늘 이번주와 저번주 키워드들을 공부하는 것이 다음주 공부에 도움이 될 것이므로 저번주차 내용을 복습하고 이번주차에 들어가시면 좋겠습니다.
14:00 ~ 15:00
운영진 티타임. 다양한 이야기를 했고, 저는 문제를 더 푸는가 일찍 퇴근해서 컨디션을 유지해야하는가? 에 대해 의문점이 있어 질문 했습니다. 코치님마다 생각이 다르셨지만, 단기간적 활동이 아닌 5개월이므로 5개월 간의 지속가능한 개발을 하는 것이 낫다. 컨디션 조절을 하되, 집중가능한 공부양을 점차 늘려가는 방식이 좋은 것 같다. 아니면 사람마다 체력이 다르기 때문에 직접 조절해가면서 적정 체력을 찾는 것을 정글에서 찾아보는 것이 좋을 것 같다는 의견도 있었습니다. 다른 동료분은 사람의 적정 수면량이 있는데, 그만큼은 취침하고 만약에 오늘 다 하지 못했을 때에는 다음날의 내용을 정리하고 자러 가는것도 한가지 방법이라고 하셨습니다.
15:00 ~ 16:00
저의 리뷰 대상자인 노기윤님의 시험 코드를 검토하고 코드리뷰를 진행했습니다. 또한, 동료 피드백을 작성하여 제출하였습니다. 팀원(김윤호님)과 함께 코어 타임을 설계 했습니다.
16:00 ~
노션을 새 주가 시작되어 정리했습니다. 시험 마지막 문제와 힙정렬에 대해서 공부하고 있습니다.
힙정렬에 대해 추가할 내용이 있다면 전에 정리했던 내용에서 보충하겠습니다.
추가문제 3개를 정리해서 올리겠습니다.
# N과 M 비교해서 맞으면 1 틀리면 0
import sys
N_num = int(input())
N = sorted(list(map(int,sys.stdin.readline().strip().split())))
M_num = int(input())
M = list(map(int,sys.stdin.readline().strip().split()))
def bin_search(N,key):
pl = 0
pr = len(N) - 1
while pl <= pr:
pc = (pl + pr) // 2 # 중앙 지정
if N[pc] == key: # 키랑 pc랑 같으면 찾음
return pc # pc값을 리턴
elif N[pc] < key: # 키값이 크면
pl = pc + 1 # 오른쪽 범위로 이동(인덱스)
else:
pr = pc - 1 # 키 값이 작으면 왼쪽 범위로 이동(인덱스)
return -1 # 종료(결과에 없음)
# 이진 탐색 수행 및 결과 출력
for key in M: # 한 개씩 돌아가면서 비교
result = bin_search(N, key) # 입력 받은 값을 대입
print(1 if result != -1 else 0) # 만약 -1이 아니라면 1, -1이면 리스트에 없으므로 0 출력
# 해당 문제가 해시로 푸는 것이 더 좋다고 한다.
# 해시는 set과 딕셔너리가 있는데, 특히 set을 쓰면 빠르게 풀수 있다.(5줄)
# 중요도가 큰것에서 작은순(내림차순)으로 문서를 정렬하고
# 큐에 대입하여 몇 번째인지 알아낸다.(중요도는 1 ~ 9)
import sys
from collections import deque
testcase = int(input())
for _ in range(testcase):
N, M = map(int,sys.stdin.readline().strip().split())
que = deque(enumerate(map(int, sys.stdin.readline().split()))) # 인덱스 자동 생성(중요도)
count = 0 # 인쇄된 문서 개수(몇번째 문서인지)
while que:
# 현재 큐에서 가장 높은 중요도를 찾는다
max_priority = max(priority for _, priority in que)
# 맨 앞 문서의 중요도가 가장 높은지 확인(인덱스(순위)와 함께 써져있어 0괄호의 1번 숫자로 불러와야한다)
if que[0][1] == max_priority:
count += 1 # 중요도가 높다면 +1
idx, _ = que.popleft() # 그러고 왼쪽에서 하나를 뺀다.(인덱스랑)
if idx == M: # 찾던 문서 M이라면 출력한다.
print(count) # 해당 문서가 몇번째 문서인지 출력
break
else:
que.append(que.popleft()) # 만약에 중요도가 높지 않으면 뽑아서 맨뒤로 이동한다.
# 첫째줄에 입력된 문자를 둘째 줄에 입력된 문자로 모두 지운다.
# 남으면 남은 문자 출력하고, 다지웠다면 FRULA이다
import sys
N = sys.stdin.readline().strip() # 원본 문자열
M = sys.stdin.readline().strip() # 폭발 문자열
stack = []
for i in N:
stack.append(i) # 현재 문자를 스택에 추가
# 스택의 끝부분이 폭발 문자열과 같다면 제거(끝부분부터 검사)(도움)
if stack[-len(M):] == list(M):
for _ in range(len(M)):
stack.pop() # 해당 열 하나씩 제거
# 결과 출력
if stack:
print("".join(stack)) # 스택에 남은 문자열 출력(띄어쓰기 제거)
# 이거 안쓰면 리스트 형식으로 뜨고 * 넣어도 띄어쓰기가 되므로 join을 통해 강제로 붙여준다.
else:
print("FRULA") # 스택이 비었다면 "FRULA" 출력
스택이 선입 후출인 특성을 고려하여 뒤에서부터 확인해서 pop을 통해 꺼내는 방식이다. 해당 공식을 사용하면 뒤에 추가되는 문자열이 C4가 되면 pop을 통해 삭제된다. CC4면 삭제되지 않고 CC44면 C4가 두 번에 걸쳐 삭제된다.