From 7ee0e1149a5fa5cca603a0eed35db85d8d471822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=A5=ED=98=9C=EC=9B=90?= <127714800+janghw0126@users.noreply.github.com> Date: Thu, 1 Aug 2024 00:16:13 +0900 Subject: [PATCH] =?UTF-8?q?2024-08-01=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- janghw0126/README.md | 3 ++ "janghw0126/\353\215\261/5430.py" | 48 ++++++++++++++++++ .../1074.py" | 32 ++++++++++++ .../2056.py" | 49 +++++++++++++++++++ 4 files changed, 132 insertions(+) create mode 100644 "janghw0126/\353\215\261/5430.py" create mode 100644 "janghw0126/\353\266\204\355\225\240 \354\240\225\353\263\265/1074.py" create mode 100644 "janghw0126/\354\234\204\354\203\201\354\240\225\353\240\254/2056.py" diff --git a/janghw0126/README.md b/janghw0126/README.md index a4f9a41..b8a4c77 100644 --- a/janghw0126/README.md +++ b/janghw0126/README.md @@ -33,4 +33,7 @@ |||||| | 1차시 | 2024.7.17 | 수학 | 머리 톡톡 |[#124](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/124) | | 2차시 | 2024.7.21 | 그리디 | 회의실 배정 |[#127](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/127) | +| 3차시 | 2024.7.24 | 덱 | AC |[#130](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/130) | +| 4차시 | 2024.7.28 | 분할 정복 | Z |[#135](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/135) | +| 5차시 | 2024.7.31 | 위상정렬 | 위상정렬 |[#138](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/138) | --- diff --git "a/janghw0126/\353\215\261/5430.py" "b/janghw0126/\353\215\261/5430.py" new file mode 100644 index 0000000..c68e6f8 --- /dev/null +++ "b/janghw0126/\353\215\261/5430.py" @@ -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) + "]") \ No newline at end of file diff --git "a/janghw0126/\353\266\204\355\225\240 \354\240\225\353\263\265/1074.py" "b/janghw0126/\353\266\204\355\225\240 \354\240\225\353\263\265/1074.py" new file mode 100644 index 0000000..3fc7943 --- /dev/null +++ "b/janghw0126/\353\266\204\355\225\240 \354\240\225\353\263\265/1074.py" @@ -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) \ No newline at end of file diff --git "a/janghw0126/\354\234\204\354\203\201\354\240\225\353\240\254/2056.py" "b/janghw0126/\354\234\204\354\203\201\354\240\225\353\240\254/2056.py" new file mode 100644 index 0000000..0693e52 --- /dev/null +++ "b/janghw0126/\354\234\204\354\203\201\354\240\225\353\240\254/2056.py" @@ -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))