-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d1c6e66
commit 7ee0e11
Showing
4 changed files
with
132 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
import sys | ||
from collections import deque | ||
|
||
input = sys.stdin.readline | ||
t = int(input()) | ||
|
||
for _ in range(t): | ||
commands = input().strip() # 명령어 문자열 | ||
num_elements = int(input()) # 배열의 원소 개수 | ||
elements = input().strip()[1:-1] # 대괄호를 제거하고 배열 요소를 가져오기 | ||
|
||
# 덱 초기화: 빈 문자열이 아니면 쉼표로 구분하여 덱으로 변환 | ||
if elements: | ||
dq = deque(elements.split(',')) | ||
else: | ||
dq = deque() | ||
|
||
is_reversed = False # 배열의 순서를 뒤집었는지 여부를 나타냄 | ||
error_occurred = False # 오류가 발생했는지를 나타냄 | ||
|
||
# 명령어를 순차적으로 처리 | ||
for command in commands: | ||
if command == 'R': | ||
# R 명령어가 나오면 뒤집기 플래그를 반전 | ||
is_reversed = not is_reversed | ||
elif command == 'D': | ||
# D 명령어 처리 | ||
if not dq: | ||
# 덱이 비어있으면 에러 출력 | ||
print("error") | ||
error_occurred = True | ||
break | ||
if is_reversed: | ||
# 뒤집힌 상태에서는 덱의 끝에서 제거 | ||
dq.pop() | ||
else: | ||
# 정상 상태에서는 덱의 앞에서 제거 | ||
dq.popleft() | ||
|
||
if error_occurred: | ||
continue # 에러가 발생하면 다음 테스트 케이스로 넘어감 | ||
|
||
if is_reversed: | ||
# 최종 상태가 뒤집힌 경우 덱을 뒤집음 | ||
dq.reverse() | ||
|
||
# 덱을 문자열로 변환하여 출력 | ||
print("[" + ",".join(dq) + "]") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# 사용자 입력 받기: N, row, col | ||
N, row, col = map(int, input().split()) | ||
|
||
# 정답 변수 초기화 | ||
result = 0 | ||
|
||
# N이 0이 될 때까지 반복 | ||
while N != 0: | ||
N -= 1 | ||
|
||
# 2사분면 | ||
if row < 2 ** N and col < 2 ** N: | ||
result += (2 ** N) * (2 ** N) * 0 # 2사분면은 추가값이 없음 | ||
|
||
# 1사분면 | ||
elif row < 2 ** N and col >= 2 ** N: | ||
result += (2 ** N) * (2 ** N) * 1 # 1사분면은 첫 번째 사분면의 추가값 | ||
col -= (2 ** N) # 열 인덱스 조정 | ||
|
||
# 3사분면 | ||
elif row >= 2 ** N and col < 2 ** N: | ||
result += (2 ** N) * (2 ** N) * 2 # 3사분면은 두 번째 사분면의 추가값 | ||
row -= (2 ** N) # 행 인덱스 조정 | ||
|
||
# 4사분면 | ||
else: | ||
result += (2 ** N) * (2 ** N) * 3 # 4사분면은 세 번째 사분면의 추가값 | ||
row -= (2 ** N) # 행 인덱스 조정 | ||
col -= (2 ** N) # 열 인덱스 조정 | ||
|
||
# 최종 결과 출력 | ||
print(result) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
import sys | ||
from collections import deque | ||
input = sys.stdin.readline | ||
|
||
def topological_sort_and_compute_times(n, task_times, dependencies): | ||
# 그래프와 진입 차수 초기화 | ||
graph = {i: [] for i in range(1, n + 1)} | ||
indegree = [0] * (n + 1) | ||
completion_time = [0] * (n + 1) | ||
|
||
# 작업 시간 초기화 | ||
for i in range(1, n + 1): | ||
completion_time[i] = task_times[i] | ||
|
||
# 그래프와 진입 차수 설정 | ||
for a, b in dependencies: | ||
graph[a].append(b) | ||
indegree[b] += 1 | ||
|
||
# 진입 차수가 0인 노드를 큐에 추가 | ||
queue = deque() | ||
for i in range(1, n + 1): | ||
if indegree[i] == 0: | ||
queue.append(i) | ||
|
||
# 위상 정렬과 작업 완료 시간 계산 | ||
while queue: | ||
current = queue.popleft() | ||
for neighbor in graph[current]: | ||
completion_time[neighbor] = max(completion_time[neighbor], completion_time[current] + task_times[neighbor]) | ||
indegree[neighbor] -= 1 | ||
if indegree[neighbor] == 0: | ||
queue.append(neighbor) | ||
|
||
return max(completion_time[1:]) | ||
|
||
n = int(input().strip()) | ||
task_times = [0] * (n + 1) | ||
dependencies = [] | ||
|
||
# 작업 시간 입력 | ||
for i in range(1, n + 1): | ||
data = list(map(int, input().split())) | ||
task_times[i] = data[0] | ||
m = data[1] | ||
for j in range(m): | ||
dependencies.append((data[2 + j], i)) | ||
|
||
print(topological_sort_and_compute_times(n, task_times, dependencies)) |