From e20a3a62c1f8556fe4f7c397bd1042159f7d227f Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Sat, 8 Feb 2025 22:11:40 +0900 Subject: [PATCH 01/22] =?UTF-8?q?=E2=9C=A8feat:=20PGS=5F43238=5F=EC=9E=85?= =?UTF-8?q?=EA=B5=AD=EC=8B=AC=EC=82=AC=5F=EC=95=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...05\352\265\255\354\213\254\354\202\254.py" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Juahjoah/_250208/PGS_43238_\354\236\205\352\265\255\354\213\254\354\202\254.py" diff --git "a/Juahjoah/_250208/PGS_43238_\354\236\205\352\265\255\354\213\254\354\202\254.py" "b/Juahjoah/_250208/PGS_43238_\354\236\205\352\265\255\354\213\254\354\202\254.py" new file mode 100644 index 0000000..4f2a895 --- /dev/null +++ "b/Juahjoah/_250208/PGS_43238_\354\236\205\352\265\255\354\213\254\354\202\254.py" @@ -0,0 +1,30 @@ +''' + * 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43238 + * 공간 복잡도: O(1) + +''' + +def solution(n, times): + left = 0 + right = max(times) * n + + answer = right + + while left <= right: + mid = (left + right) // 2 + + # mid 시간 동안 처리할 수 있는 사람 + total = 0 + for t in times: + total += mid // t + # n을 초과했다면 중지 + if total>= n: + break + + if total >= n: + answer = mid + right = mid - 1 + else: + left = mid + 1 + + return answer \ No newline at end of file From 7f510af09326bae0d77469430b13722b36ce9875 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Thu, 20 Feb 2025 23:29:02 +0900 Subject: [PATCH 02/22] =?UTF-8?q?=E2=9C=A8feat:=20BOJ=5F1487=5F=EB=AC=BC?= =?UTF-8?q?=EA=B1=B4=20=ED=8C=94=EA=B8=B0=5F=EC=95=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\352\261\264 \355\214\224\352\270\260.py" | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 "Juahjoah/_250220/BOJ_1487_\353\254\274\352\261\264 \355\214\224\352\270\260.py" diff --git "a/Juahjoah/_250220/BOJ_1487_\353\254\274\352\261\264 \355\214\224\352\270\260.py" "b/Juahjoah/_250220/BOJ_1487_\353\254\274\352\261\264 \355\214\224\352\270\260.py" new file mode 100644 index 0000000..02b21e3 --- /dev/null +++ "b/Juahjoah/_250220/BOJ_1487_\353\254\274\352\261\264 \355\214\224\352\270\260.py" @@ -0,0 +1,45 @@ +''' + * 문제 링크: https://www.acmicpc.net/problem/1487 + * 메모리: 32412 KB + * 시간: 36 ms + * 시간 복잡도: O(N²) + * 공간 복잡도: O(N) +''' + + +# 최대 이익 제공하는 최적의 판매 가격을 반환하는 함수 +def find_price(): + max_profit = 0 # 최대 이익을 저장할 변수 + best_price = 0 # 최적 판매 가격을 저장할 변수 + + # 모든 구매자의 지불 가능 금액을 판매 가격 후보로 설정 + for price in [p[0] for p in consumer_list]: + profit = 0 # 이익을 이 단계에서 초기화 = 그래야 금액 별로 이익을 파악 가능 + for max_price, delivery_fee in consumer_list: + if price <= max_price: # 구매자가 해당 금액에 구매할 수 있는 경우, + benefit = price - delivery_fee + if benefit > 0 : # 이익이 양수인 경우에만 이익으로 고려 + profit += benefit + + # 최대 이익을 계산하고, 이익이 동일하다면 낮은 가격 선택 + if profit > max_profit: + max_profit = profit + best_price = price + elif profit == max_profit and price < best_price: + best_price = price + + # 이익이 없는 경우 0을 반환 + if max_price == 0: + return 0 + + return best_price + +N = int(input()) +consumer_list = [list(map(int, input().split())) for _ in range(N)] + +# 지불할 최대 가격, 배송비가 낮은순으로 정렬 +consumer_list.sort(key = lambda x:(x[0], x[1])) + + +print(find_price()) + From 380126ef982b417b9b02e1094ca4648d3d9a86ea Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Tue, 25 Feb 2025 21:52:58 +0900 Subject: [PATCH 03/22] =?UTF-8?q?=E2=9C=A8feat:=20PGS=5F320213=5F=EB=8F=99?= =?UTF-8?q?=EC=98=81=EC=83=81=20=EC=9E=AC=EC=83=9D=EA=B8=B0=5F=EC=95=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...353\254\270\354\240\234 1\353\262\210).py" | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 "Juahjoah/_250225/PGS_340213_ \353\217\231\354\230\201\354\203\201 \354\236\254\354\203\235\352\270\260(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 1\353\262\210).py" diff --git "a/Juahjoah/_250225/PGS_340213_ \353\217\231\354\230\201\354\203\201 \354\236\254\354\203\235\352\270\260(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 1\353\262\210).py" "b/Juahjoah/_250225/PGS_340213_ \353\217\231\354\230\201\354\203\201 \354\236\254\354\203\235\352\270\260(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 1\353\262\210).py" new file mode 100644 index 0000000..65cac6b --- /dev/null +++ "b/Juahjoah/_250225/PGS_340213_ \353\217\231\354\230\201\354\203\201 \354\236\254\354\203\235\352\270\260(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 1\353\262\210).py" @@ -0,0 +1,71 @@ +''' + * 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/340213 + * 시간 복잡도: O(N) + * 공간 복잡도: O(1) +''' + +def solution(video_len, pos, op_start, op_end, commands): + answer = '' + input_list = [] + input_list = [video_len, pos, op_start, op_end] + + # input 값을 int로 변경해주는 과정 필요 + # for i in range(len(input_list)): + for i, inp in enumerate(input_list): + minute, second = inp.split(":") + int_input = int(minute) * 60 + int(second) + + input_list[i] = int_input + + video_len, pos, op_start, op_end = input_list + now_play = pos + + # 시작할 때 오프닝 포함인지 미리 확인해서 건너뛰기 + def opening(now_play): + if op_start <= now_play <= op_end: + return op_end + return now_play + + # 10초 전 함수 + def prev(now_play): + prev_play = now_play - 10 + if prev_play < 0: + return 0 + + # 오프닝 구간 처리 + elif op_start <= prev_play <= op_end: + return op_end + return prev_play + + + # 10초 뒤 함수 + def next(now_play): + next_play = now_play + 10 + if next_play > video_len: + return video_len + + # 오프닝 구간 처리 + elif op_start <= next_play <= op_end: + return op_end + return next_play + + # 주어진 입력 값 꺼내서 함수 처리 + for command in commands: + # 안맞던 테스트 케이스 이 함수 추가해서 성공 + now_play = opening(now_play) + if command == "next": + now_play = next(now_play) + else: + now_play = prev(now_play) + + + # 값을 다시 string 형태로 변환 + if now_play > 0: + minute = now_play // 60 + second = now_play % 60 + # answer += (minute + ":" + second) + answer = f"{minute:02}:{second:02}" + else: + answer = "00:00" + + return answer \ No newline at end of file From a5d0c840b5a13e4c42426e7999300cf589c6a022 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Tue, 4 Mar 2025 17:37:11 +0900 Subject: [PATCH 04/22] =?UTF-8?q?=E2=9C=A8feat:=20PGS=5F230136=5F=EC=84=9D?= =?UTF-8?q?=EC=9C=A0=20=EC=8B=9C=EC=B6=94=5F=EC=95=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...353\254\270\354\240\234 2\353\262\210).py" | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 "Juahjoah/250304/PGS_250136_\354\204\235\354\234\240 \354\213\234\354\266\224(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 2\353\262\210).py" diff --git "a/Juahjoah/250304/PGS_250136_\354\204\235\354\234\240 \354\213\234\354\266\224(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 2\353\262\210).py" "b/Juahjoah/250304/PGS_250136_\354\204\235\354\234\240 \354\213\234\354\266\224(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 2\353\262\210).py" new file mode 100644 index 0000000..6bf61e1 --- /dev/null +++ "b/Juahjoah/250304/PGS_250136_\354\204\235\354\234\240 \354\213\234\354\266\224(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 2\353\262\210).py" @@ -0,0 +1,75 @@ +''' + * 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/250136 + * 시간 복잡도: O(N*M) + * 공간 복잡도: O(N*M) + + - 첫 시도에서는 값이 중복되어서 굉장히 큰 값이 답으로 나옴. + - land에 단순히 연결된 크기를 전부 넣었더니 중복되는 경우가 생김. + - 딕셔너리를 활용해 land에는 id 값을 저장하고, 딕셔너리에 크기를 따로 저장함. +''' + +from collections import deque + +def solution(land): + + dx = [1, 0, -1, 0] + dy = [0, -1, 0, 1] + oil_id = 2 # land 기본값이 0, 1이니까 2부터 시작 + oil_size = {} + + # visited 처리해줌과 동시에 land 값에 연결되어 있는 칸의 수를 세서 집어넣기 -> 불가 + # 연결된 칸의 수는 id 값으로 연결해 딕셔너리에 저장하고, land에는 id 값을 저장 + def BFS(i, j): + queue = deque() + queue.append((i, j)) + visited[i][j] = True + + cnt = 1 #시작하는 칸 포함 + position = [(i, j)] + + while queue: + x, y = queue.popleft() + + for d in range(4): + nx, ny = x + dx[d], y + dy[d] + + if 0 <= nx < n and 0 <= ny < m and not visited[nx][ny] and land[nx][ny] == 1: + visited[nx][ny] = True + cnt += 1 + queue.append((nx, ny)) + position.append((nx, ny)) + + for x, y in position: + land[x][y] = oil_id + + oil_size[oil_id] = cnt + + # n, m 값 세기 + n = len(land) + m = len(land[0]) if land else 0 + + visited = [[False]*m for _ in range(n)] + + for i in range(n): + for j in range(m): + if land[i][j] == 1 and not visited[i][j]: + BFS(i, j) + oil_id += 1 + + # 각 열마다 나오는 값 중 최고 값을 골라서 반환 + answer_list = [] + + # oil_id가 중복되지 않는 경우만 찾아야 함 + # 초기화 위치 중요! 잘 생각하기! + for k in range(m): + count = 0 + oil_list = [] + for j in range(n): + oil_id = land[j][k] + if oil_id >= 2 and oil_id not in oil_list: + count += oil_size[oil_id] + oil_list.append(oil_id) + + answer_list.append(count) + + return max(answer_list) \ No newline at end of file From e64d755bd30d78d5653546033d3889e19250bdd7 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Thu, 6 Mar 2025 17:32:16 +0900 Subject: [PATCH 05/22] =?UTF-8?q?=F0=9F=9A=9Arename:=20=ED=8F=B4=EB=8D=94?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...270\260\354\266\234\353\254\270\354\240\234 2\353\262\210).py" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Juahjoah/250304/PGS_250136_\354\204\235\354\234\240 \354\213\234\354\266\224(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 2\353\262\210).py" => "Juahjoah/_250304/PGS_250136_\354\204\235\354\234\240 \354\213\234\354\266\224(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 2\353\262\210).py" (100%) diff --git "a/Juahjoah/250304/PGS_250136_\354\204\235\354\234\240 \354\213\234\354\266\224(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 2\353\262\210).py" "b/Juahjoah/_250304/PGS_250136_\354\204\235\354\234\240 \354\213\234\354\266\224(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 2\353\262\210).py" similarity index 100% rename from "Juahjoah/250304/PGS_250136_\354\204\235\354\234\240 \354\213\234\354\266\224(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 2\353\262\210).py" rename to "Juahjoah/_250304/PGS_250136_\354\204\235\354\234\240 \354\213\234\354\266\224(PCCP \352\270\260\354\266\234\353\254\270\354\240\234 2\353\262\210).py" From c0b3cfad103d5e88cdf5f7b35a595ee4b43c7c25 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Thu, 6 Mar 2025 17:36:25 +0900 Subject: [PATCH 06/22] =?UTF-8?q?=E2=9C=A8feat:=20PGS=5F389479=5F=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20=EC=A6=9D=EC=84=A4=20=ED=9A=9F=EC=88=98=5F=EC=95=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\354\204\244 \355\232\237\354\210\230.py" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Juahjoah/_250306/PGS_389479_\354\204\234\353\262\204 \354\246\235\354\204\244 \355\232\237\354\210\230.py" diff --git "a/Juahjoah/_250306/PGS_389479_\354\204\234\353\262\204 \354\246\235\354\204\244 \355\232\237\354\210\230.py" "b/Juahjoah/_250306/PGS_389479_\354\204\234\353\262\204 \354\246\235\354\204\244 \355\232\237\354\210\230.py" new file mode 100644 index 0000000..67872f1 --- /dev/null +++ "b/Juahjoah/_250306/PGS_389479_\354\204\234\353\262\204 \354\246\235\354\204\244 \355\232\237\354\210\230.py" @@ -0,0 +1,29 @@ +''' + * 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/389479 + * 시간 복잡도: O(1) + * 공간 복잡도: O(1) +''' + +# 주어진 players를 돌면서 각 시간에 맞는 유저의 수 확인 & 서버 개수 확인 +# k를 cnt_user에 어떻게 반영할 것인가? + +import math + +def solution(players, m, k): + answer = 0 + + server_list = [1] * 24 + + # for p in players: + for i in range(24): + # m * server_list[i] - 1: 현재 시간대에서 서버에서 감당 가능한 사용자 수 + cnt_server = math.ceil((players[i] - (m * server_list[i] - 1)) / m) + if cnt_server > 0: # 서버가 필요한 경우에는 + answer += cnt_server + # 각 시간대에 늘어난 서버의 개수 정보를 저장해주기 + for j in range(i, i+k): + if j >= 24: + break + server_list[j] += cnt_server + + return answer \ No newline at end of file From 17a37e86e403fbf1ecb1014e2f644367b7bf4110 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Fri, 21 Mar 2025 22:07:00 +0900 Subject: [PATCH 07/22] =?UTF-8?q?=E2=9C=A8feat:=20BOJ=5F2877=5F4=EC=99=80?= =?UTF-8?q?=207=5F=EC=95=8C=EA=B3=A0=EB=A6=AC=EC=A6=98=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_250321/BOJ_2877_4\354\231\200 7.py" | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "Juahjoah/_250321/BOJ_2877_4\354\231\200 7.py" diff --git "a/Juahjoah/_250321/BOJ_2877_4\354\231\200 7.py" "b/Juahjoah/_250321/BOJ_2877_4\354\231\200 7.py" new file mode 100644 index 0000000..87a6a24 --- /dev/null +++ "b/Juahjoah/_250321/BOJ_2877_4\354\231\200 7.py" @@ -0,0 +1,29 @@ +# 2877. 4와 7 + +''' + * 문제 링크: https://www.acmicpc.net/problem/2877 + * 메모리: 32412 KB + * 시간: 32 ms + * 시간 복잡도: O(log K) + * 공간 복잡도: O(log K) + + * 엠로 코딩테스트 4번과 유사한 문제 + * a와 b로 이루어진 수열에서 K번째 수를 찾는 문제 +''' + + +def check_num(a, b, K): + answer = '' + while K > 0: + l = K % 2 # 짝수, 홀수 판단 → 현재 K의 마지막 비트(짝수/홀수)를 확인 + K = K // 2 # K를 2로 나누어 다음 비트로 이동 + if l == 0: # 짝수인 경우, + K -= 1 # 4, 7을 번갈아가며 사용해야 하므로, 짝수인 경우 1을 빼고 7로 대체 + answer = b + answer # 7을 앞에 붙임 + else: # 홀수인 경우, + answer = a + answer # 4를 앞에 붙임 + + print(answer) + +K = int(input()) +check_num('4', '7', K) \ No newline at end of file From adda0ff300f093e26db8f4d7eb7d6980cb975744 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Sat, 22 Mar 2025 00:26:11 +0900 Subject: [PATCH 08/22] =?UTF-8?q?=E2=9C=A8feat:=20BOJ=5F2531=5F=ED=9A=8C?= =?UTF-8?q?=EC=A0=84=EC=B4=88=EB=B0=A5=5F=EC=95=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\354\240\204 \354\264\210\353\260\245.py" | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 "Juahjoah/_250321/BOJ_2531_\355\232\214\354\240\204 \354\264\210\353\260\245.py" diff --git "a/Juahjoah/_250321/BOJ_2531_\355\232\214\354\240\204 \354\264\210\353\260\245.py" "b/Juahjoah/_250321/BOJ_2531_\355\232\214\354\240\204 \354\264\210\353\260\245.py" new file mode 100644 index 0000000..a52463b --- /dev/null +++ "b/Juahjoah/_250321/BOJ_2531_\355\232\214\354\240\204 \354\264\210\353\260\245.py" @@ -0,0 +1,75 @@ +# 2531. 회전초밥 + +''' + * 문제 링크: https://www.acmicpc.net/problem/2531 + * 메모리: 33432 KB + * 시간: 800 ms + * 시간 복잡도: O(N) + * 공간 복잡도: O(N + d) + + * 엠로 코딩테스트 2번과 유사한 문제 + * 마실 수 있는 최대의 음료수 개수 +''' + +N, d, k, c = map(int, input().split()) +input_list = [int(input()) for _ in range(N)] +input_list += input_list[:k - 1] # 연결되어 있으니까 부족한 k만큼 추가 + +# 가장 큰 숫자는 9천만. → for 문 2개 돌리면 1억 8천개의 연산이 진행됨. +# → for문을 돌면서 매번 배열을 생성하는 게 아니라 슬라이싱 윈도우를 활용 + +# 연속된 k개의 초밥의 종류 파악하기 +sushi_type = [0] * (d + 1) # 스시의 종류별 개수를 담을 리스트 +answer = 0 + +# 쿠폰(c) 초밥 확인 +sushi_type[c] += 1 +sushi_cnt = 1 + +for i in range(k): + if sushi_type[input_list[i]] == 0: # 처음 등장한 초밥이라면, + sushi_cnt += 1 # 초밥 종류 수 추가 + sushi_type[input_list[i]] += 1 # 초밥 갯수 증가 + +answer = sushi_cnt + +# 슬라이딩 윈도우 : 시작 값 빼고 다음 값 추가하기 +for j in range(N - 1): # N까지 하면 어차피 처음 값과 같아져서 굳이 할 필요 없음. + sushi_type[input_list[j]] -= 1 + if sushi_type[input_list[j]] == 0: + sushi_cnt -= 1 + sushi_type[input_list[k + j]] += 1 + if sushi_type[input_list[k + j]] == 1: + sushi_cnt += 1 + + answer = max(answer, sushi_cnt) + +print(answer) + +''' 1번째 +# 매번 윈도우를 새로 만들고, 중복 제거를 위해 리스트와 in 연산을 사용해서 시간 초과 + +# 연속된 k개의 초밥의 종류 파악하기 +for i in range(N): + check_sushi = [] # 시작 초밥을 기준으로 k개를 담기 + + for number in range(k): + if i + number < N: + check_sushi.append(input_list[i+number]) + # k개의 초밥을 선택 → 최적의 선택인지 확인 + sushi_cnt = 0 + # 중복을 제거해서 초밥의 갯수 확인 + # set_sushi = list(set(check_sushi)) + sushi_list = [] + for sushi in check_sushi: + if sushi not in sushi_list: + sushi_list.append(sushi) + sushi_cnt += 1 + if c not in check_sushi: + sushi_cnt += 1 + + answer = max(answer, sushi_cnt) + +print(answer) + +''' From f2aefd952d5fea70141c8c116ccc581e12fe9872 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Tue, 22 Apr 2025 22:43:51 +0900 Subject: [PATCH 09/22] =?UTF-8?q?=E2=9C=A8feat:=20BOJ=5F11725=5F=ED=8A=B8?= =?UTF-8?q?=EB=A6=AC=EC=9D=98=20=EB=B6=80=EB=AA=A8=EC=B0=BE=EA=B8=B0=5F?= =?UTF-8?q?=EC=95=8C=EA=B3=A0=EB=A6=AC=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\353\252\250 \354\260\276\352\270\260.py" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "Juahjoah/_250422/BOJ_11725_\355\212\270\353\246\254\354\235\230 \353\266\200\353\252\250 \354\260\276\352\270\260.py" diff --git "a/Juahjoah/_250422/BOJ_11725_\355\212\270\353\246\254\354\235\230 \353\266\200\353\252\250 \354\260\276\352\270\260.py" "b/Juahjoah/_250422/BOJ_11725_\355\212\270\353\246\254\354\235\230 \353\266\200\353\252\250 \354\260\276\352\270\260.py" new file mode 100644 index 0000000..d5966cf --- /dev/null +++ "b/Juahjoah/_250422/BOJ_11725_\355\212\270\353\246\254\354\235\230 \353\266\200\353\252\250 \354\260\276\352\270\260.py" @@ -0,0 +1,50 @@ +# 11725. 트리의 부모 찾기 + +''' + * 문제 링크: https://www.acmicpc.net/problem/11725 + * 메모리: 65240 KB + * 시간: 360 ms + * 시간 복잡도: O(N) + * 공간 복잡도: O(N) + + * 인접 리스트에 저장된 트리에서 BFS를 통해 부모 노드를 찾는 문제 + * 트리니까 각 너비에 맞게 접근해야 함. = BFS +''' + +from collections import deque +import sys + +input = sys.stdin.readline + +def bfs(): + queue = deque() + queue.append(1) + visited[1] = True + + while queue: + node = queue.popleft() + + for n in adj_list[node]: + if not visited[n]: + answer_list[n] = node + queue.append(n) + visited[n] =True + + return + + +N = int(input()) +input_list = [list(map(int, input().split())) for _ in range(N-1)] + +adj_list = [[] for _ in range(N + 1)] + +for x, y in input_list: + adj_list[x].append(y) + adj_list[y].append(x) + +answer_list = [0] * (N + 1) +visited = [False] * (N + 1) +bfs() + +for answer in range(2, N + 1): + print(answer_list[answer]) \ No newline at end of file From a423f4f003f9abfd96297bfb8337b5c4c32409fd Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Thu, 24 Apr 2025 11:37:10 +0900 Subject: [PATCH 10/22] =?UTF-8?q?=E2=9C=A8feat:=20BOJ=5F2138=5F=EC=A0=84?= =?UTF-8?q?=EA=B5=AC=EC=99=80=20=EC=8A=A4=EC=9C=84=EC=B9=98=5F=EC=95=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0 \354\212\244\354\234\204\354\271\230.py" | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 "Juahjoah/_250424/BOJ_2138_\354\240\204\352\265\254\354\231\200 \354\212\244\354\234\204\354\271\230.py" diff --git "a/Juahjoah/_250424/BOJ_2138_\354\240\204\352\265\254\354\231\200 \354\212\244\354\234\204\354\271\230.py" "b/Juahjoah/_250424/BOJ_2138_\354\240\204\352\265\254\354\231\200 \354\212\244\354\234\204\354\271\230.py" new file mode 100644 index 0000000..bd8fbb8 --- /dev/null +++ "b/Juahjoah/_250424/BOJ_2138_\354\240\204\352\265\254\354\231\200 \354\212\244\354\234\204\354\271\230.py" @@ -0,0 +1,98 @@ +# 2138. 전구와 스위치 + +''' + * 문제 링크: https://www.acmicpc.net/problem/2138 + * 메모리: 35544 KB + * 시간: 88 ms + * 시간 복잡도: O(N) + * 공간 복잡도: O(N) + + * i-1 번째 전구를 최우선으로 생각하기 + * i-1 번째 전구가 다르다면 누르기, 맞으면 그냥 넘어가기 + * 마지막 2개의 값이 남았을 때, 내가 스위치를 눌러서 값이 맞으면 정답을 만들 수 있는 것. 아니면 -1 +''' + +import sys +input = sys.stdin.readline + +def check_switch(check_list): + cnt = 0 + + for i in range(1, N-1): + # 스위치를 누르지 않는 경우 + if check_list[i - 1] == target_list[i - 1]: + continue + # 스위치를 누르는 경우 + else: + cnt += 1 + convert_switch(i, check_list) + + # N번째 확인하면 끝! + if check_list[N-2] == target_list[N-2] and check_list[N-1] == target_list[N-1]: + # if check_list[N-1] == target_list[N-1]: + return cnt + elif check_list[N-2] != target_list[N-2]: + cnt += 1 + convert_switch(N-2, check_list) + + if check_list[N-2] == target_list[N-2] and check_list[N-1] == target_list[N-1]: + return cnt + return -1 + + # 이 부분에서 에러처리가 제대로 되지 않아 n-2 값이 같고, n-1 값이 다른 경우에 그냥 if문을 빠져나오면서 return이 없는 none 상태가 됨. + # 이 상태에서 아래에서 값을 +1 하다보니 오류가 발생! + else: + return -1 + + + +def convert_switch(idx, convert_list): + if idx - 1 >= 0: + if convert_list[idx - 1] == '1': + convert_list[idx - 1] = '0' + else: + convert_list[idx - 1] = '1' + + if convert_list[idx] == '1': + convert_list[idx] = '0' + else: + convert_list[idx] = '1' + + if idx + 1 < N: + if convert_list[idx + 1] == '1': + convert_list[idx + 1] = '0' + else: + convert_list[idx + 1] = '1' + + +N = int(input()) +# input_list = list(map(int, input().split())) +input_list = list(input().rstrip()) +target_list = list(input().rstrip()) + +# switch_input_list = input_list +case1_input_list = input_list[:] +case2_input_list = input_list[:] + + +# 시작 시점에서 스위치를 누르고 시작 or 안 누르고 시작 2가지 경우 +# case 1 : 안 누르고 시작 +case1 = check_switch(case1_input_list) + +# case 2: 누르고 시작 +convert_switch(0, case2_input_list) + +case2 = check_switch(case2_input_list) +if case2 != -1: + case2 += 1 + +if case1 >= 0 and case2 >= 0: + answer = min(case1, case2) +elif case1 == -1: + answer = case2 +elif case2 == -1: + answer = case1 +else: + answer = -1 + +print(answer) \ No newline at end of file From 656f3090dc0152029c8fe96a922ec6403850f288 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Thu, 24 Apr 2025 23:07:18 +0900 Subject: [PATCH 11/22] =?UTF-8?q?=E2=9C=A8feat:=20BOJ=5F12851=5F=EC=88=A8?= =?UTF-8?q?=EB=B0=94=EA=BC=AD=EC=A7=88=202=5F=EC=95=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\353\260\224\352\274\255\354\247\210 2.py" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "Juahjoah/_250424/BOJ_12851_\354\210\250\353\260\224\352\274\255\354\247\210 2.py" diff --git "a/Juahjoah/_250424/BOJ_12851_\354\210\250\353\260\224\352\274\255\354\247\210 2.py" "b/Juahjoah/_250424/BOJ_12851_\354\210\250\353\260\224\352\274\255\354\247\210 2.py" new file mode 100644 index 0000000..1388f00 --- /dev/null +++ "b/Juahjoah/_250424/BOJ_12851_\354\210\250\353\260\224\352\274\255\354\247\210 2.py" @@ -0,0 +1,41 @@ +# 12851. 숨바꼭질 2 + +''' + * 문제 링크: https://www.acmicpc.net/problem/12851 + * 메모리: 45532 KB + * 시간: 136 ms + * 시간 복잡도: O(N) + * 공간 복잡도: O(N) +''' + +import sys +input = sys.stdin.readline + +from collections import deque + +def bfs(N, K): + queue = deque() + queue.append((N, 0)) + visited = [[0, 0] for _ in range(100001)] # [개수, 시간] + visited[N][0] += 1 + + while queue: + node, time = queue.popleft() + + if node == K: + return time, visited[node][0] + + for cur_node in [node + 1, node - 1, node * 2]: # 현재 위치에서 이동 가능한 다음 위치들 + if 0 <= cur_node <= 100000: + if visited[cur_node][1] == time + 1: # 이미 방문했지만 동일한 시간(time+1)으로 도달 가능한 경우 + visited[cur_node][0] += visited[node][0] # 지금 위치까지 오는데 걸린 경로 수를 누적 + elif visited[cur_node][1] == 0: # 아직 방문한 적 없는 위치 + visited[cur_node][0] += visited[node][0] # 현재까지의 경로 수를 그대로 복사 + visited[cur_node][1] = time + 1 + queue.append((cur_node, time + 1)) + +N, K = map(int, input().split()) + +answer, result = bfs(N, K) +print(answer) +print(result) From f46bf8d56d5ec3a62c664a72df93a9ec6f82f2a4 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Fri, 25 Apr 2025 22:57:00 +0900 Subject: [PATCH 12/22] =?UTF-8?q?=E2=9C=A8feat:=20BGS=5F42863=5F=EC=B2=B4?= =?UTF-8?q?=EC=9C=A1=EB=B3=B5=5F=EC=95=8C=EA=B3=A0=EB=A6=AC=EC=A6=98=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...2_\354\262\264\354\234\241\353\263\265.py" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "Juahjoah/_250425/PGS_42862_\354\262\264\354\234\241\353\263\265.py" diff --git "a/Juahjoah/_250425/PGS_42862_\354\262\264\354\234\241\353\263\265.py" "b/Juahjoah/_250425/PGS_42862_\354\262\264\354\234\241\353\263\265.py" new file mode 100644 index 0000000..000a812 --- /dev/null +++ "b/Juahjoah/_250425/PGS_42862_\354\262\264\354\234\241\353\263\265.py" @@ -0,0 +1,41 @@ +# 42862. 체육복 + +''' + * 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42862 + * 시간 복잡도: O(N) + * 공간 복잡도: O(N) +''' + +def solution(n, lost, reserve): + answer = 0 + + real_lost = set(lost) - set(reserve) + real_reserve = set(reserve) - set(lost) + + clothes_list = [1] * (n + 1) + # 도난당한 체육복 반영 + for l in real_lost: + clothes_list[l] = 0 + + # 빌려줄 수 있는 체육복 채우기 + for r in real_reserve: + # 일단 내꺼가 없으면 그것부터 채우기 + # if clothes_list[r] == 0: + # clothes_list[r] = 1 + # for i in range(len(reserve)): + # if reserve[i] == r: + # reserve.discard(r) + # 다른 친구에게 빌려줄 수 있는 경우 + # else: + if r > 1 and clothes_list[r - 1] == 0: + clothes_list[r - 1] = 1 + continue + elif r < n and clothes_list[r + 1] == 0: + clothes_list[r + 1] = 1 + continue + + for c in range(1, n + 1): + if clothes_list[c] == 1: + answer += 1 + + return answer \ No newline at end of file From a6f40967f9dca8a3d91b60bb7d0876cbe2190ee4 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Fri, 25 Apr 2025 22:58:56 +0900 Subject: [PATCH 13/22] =?UTF-8?q?=E2=9C=A8feat:=20BOJ=5F6603=5F=EB=A1=9C?= =?UTF-8?q?=EB=98=90=5F=EC=95=8C=EA=B3=A0=EB=A6=AC=EC=A6=98=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BOJ_6603_\353\241\234\353\230\220.py" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "Juahjoah/_250425/BOJ_6603_\353\241\234\353\230\220.py" diff --git "a/Juahjoah/_250425/BOJ_6603_\353\241\234\353\230\220.py" "b/Juahjoah/_250425/BOJ_6603_\353\241\234\353\230\220.py" new file mode 100644 index 0000000..c36ca66 --- /dev/null +++ "b/Juahjoah/_250425/BOJ_6603_\353\241\234\353\230\220.py" @@ -0,0 +1,24 @@ +# 6603. 로또 + +''' + * 문제 링크: https://www.acmicpc.net/problem/6603 + * 메모리: 32412 KB + * 시간: 36 ms + * 시간 복잡도: O(N) + * 공간 복잡도: O(N) +''' + +from itertools import combinations + +while True: + input_num = input().split() + # 여기서 input을 list로 받기 때문에 [0]으로 확인해야 정상 작동 (런타임에러 유의!) + if input_num[0] == '0': + break + + K = int(input_num[0]) + S = input_num[1:] + + for i in combinations(S, 6): + print(' '.join(i)) + print() From 90975b0dbc56c0940d89cbaf829ebf77cf4fa9d0 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Sat, 26 Apr 2025 01:01:25 +0900 Subject: [PATCH 14/22] =?UTF-8?q?=E2=9C=A8feat:=20BOJ=5F9742=5F=EC=88=9C?= =?UTF-8?q?=EC=97=B4=5F=EC=95=8C=EA=B3=A0=EB=A6=AC=EC=A6=98=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BOJ_9742_\354\210\234\354\227\264.py" | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 "Juahjoah/_250426/BOJ_9742_\354\210\234\354\227\264.py" diff --git "a/Juahjoah/_250426/BOJ_9742_\354\210\234\354\227\264.py" "b/Juahjoah/_250426/BOJ_9742_\354\210\234\354\227\264.py" new file mode 100644 index 0000000..d008622 --- /dev/null +++ "b/Juahjoah/_250426/BOJ_9742_\354\210\234\354\227\264.py" @@ -0,0 +1,32 @@ +# 9742. 순열 + +''' + * 문제 링크: https://www.acmicpc.net/problem/9742 + * 메모리: 32412 KB + * 시간: 732 ms + * 시간 복잡도: O(N) + * 공간 복잡도: O(N) +''' + +from itertools import permutations + +while True: + try: + text, num = input().split() + num = int(num) + + cnt = 0 + flag = False + + for p in permutations(text, len(text)): + cnt += 1 + if cnt == num : + print(text, num, '=', ''.join(p)) + flag = True + break + + if not flag: + print(text, num, '=', 'No permutation') + + except EOFError: + break From 141e56989239cf731710dcb867fabb2221b81551 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Tue, 29 Apr 2025 20:16:31 +0900 Subject: [PATCH 15/22] =?UTF-8?q?=E2=9C=A8feat:=20BOJ=5F1158=5F=EC=9A=94?= =?UTF-8?q?=EC=84=B8=ED=91=B8=EC=8A=A4=20=EB=AC=B8=EC=A0=9C=5F=EC=95=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\354\212\244 \353\254\270\354\240\234.py" | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 "Juahjoah/_250429/BOJ_1158_\354\232\224\354\204\270\355\221\270\354\212\244 \353\254\270\354\240\234.py" diff --git "a/Juahjoah/_250429/BOJ_1158_\354\232\224\354\204\270\355\221\270\354\212\244 \353\254\270\354\240\234.py" "b/Juahjoah/_250429/BOJ_1158_\354\232\224\354\204\270\355\221\270\354\212\244 \353\254\270\354\240\234.py" new file mode 100644 index 0000000..5d00b2b --- /dev/null +++ "b/Juahjoah/_250429/BOJ_1158_\354\232\224\354\204\270\355\221\270\354\212\244 \353\254\270\354\240\234.py" @@ -0,0 +1,36 @@ +# 1158. 요세푸스 문제 + +''' + * 문제 링크: https://www.acmicpc.net/problem/1158 + * 메모리: 34908 KB + * 시간: 2356 ms + * 시간 복잡도: O(N) + * 공간 복잡도: O(N) + + * 아이디어가 필요한 구현 방식 + * 오래간만에 Join 활용 +''' + +from collections import deque +import sys + +input = sys.stdin.readline + +N, K = map(int, input().split()) +queue = deque() +answer_list = [] + +for i in range (1, N + 1): + queue.append(i) + +while queue: + # if len(queue) >= K: + # x = queue[K] + # answer_list.append(x) + # queue.remove(queue[K]) + + for _ in range(K - 1): + queue.append(queue.popleft()) # K번째 앞에 있는 값들 꺼내서 뒤로 붙이기 + answer_list.append(queue.popleft()) # K번째 값 뽑아서 넣기 + +print('<' + ', '.join(map(str, answer_list)) + '>') \ No newline at end of file From c0afdd173d9538be00b95003ccc8932d9c4f8535 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Tue, 13 May 2025 00:21:16 +0900 Subject: [PATCH 16/22] =?UTF-8?q?=E2=9C=A8feat:=20PGS=5F87694=5F=EC=95=84?= =?UTF-8?q?=EC=9D=B4=ED=85=9C=20=EC=A4=8D=EA=B8=B0=5F=EC=95=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\355\205\234 \354\244\215\352\270\260.js" | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "Juahjoah/_250512/PGS_87694_\354\225\204\354\235\264\355\205\234 \354\244\215\352\270\260.js" diff --git "a/Juahjoah/_250512/PGS_87694_\354\225\204\354\235\264\355\205\234 \354\244\215\352\270\260.js" "b/Juahjoah/_250512/PGS_87694_\354\225\204\354\235\264\355\205\234 \354\244\215\352\270\260.js" new file mode 100644 index 0000000..c0addb4 --- /dev/null +++ "b/Juahjoah/_250512/PGS_87694_\354\225\204\354\235\264\355\205\234 \354\244\215\352\270\260.js" @@ -0,0 +1,62 @@ +// 87694. 아이템 줍기 + +/* + * 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/87694 + +*/ + +function bfs(map, startX, startY, endX, endY) { + const dx = [0, -1, 0, 1]; + const dy = [1, 0, -1, 0]; + let visited = Array.from({length : map.length}, () => Array(map[0].length).fill(false)); + + let queue = []; + queue.push([startX, startY, 0]); + visited[startX][startY] = true; + + while (queue.length) { + let [x, y, cnt] = queue.shift(); + + if (x === endX && y === endY) { + return cnt; + } + for (let i = 0; i < 4; i++) { + let nx = x + dx[i]; + let ny = y + dy[i]; + + if (0 <= nx && nx < map.length && 0 <= ny && ny < map[0].length && !visited[nx][ny] && map[nx][ny] === 1) { + queue.push([nx, ny, cnt + 1]); + visited[nx][ny] = true; + } + } + } +} + +function solution(rectangle, characterX, characterY, itemX, itemY) { + let answer = 0; + const size = 102; + + // 이동할 수 있는 구역을 1로 표시한 배열 + let map = Array.from({length : size}, () => Array(size).fill(0)); + + // map을 채우기 + for (let [x1, y1, x2, y2] of rectangle) { + for (let i = x1 * 2; i <= x2 * 2; i++) { + for (let j = y1 * 2; j <= y2 * 2; j++) { + map[i][j] = 1; + } + } + } + + for (let [x1, y1, x2, y2] of rectangle) { + for (let n = x1 * 2 + 1; n < x2 * 2; n++) { + for (let m = y1 * 2 + 1; m < y2 * 2; m++) { + map[n][m] = 0; + } + } + } + + answer = bfs(map, characterX * 2, characterY * 2, itemX * 2, itemY * 2) / 2 + + return answer; +} \ No newline at end of file From 884c7e4ad885639f09a4c2a05160cc5b7af103e1 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Tue, 13 May 2025 21:32:30 +0900 Subject: [PATCH 17/22] =?UTF-8?q?=E2=9C=A8feat:=20PGS=5F43238=5F=EC=9E=85?= =?UTF-8?q?=EA=B5=AD=20=EC=8B=AC=EC=82=AC=5F=EC=95=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\352\265\255 \354\213\254\354\202\254.js" | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 "Juahjoah/_250513/PGS_43238_\354\236\205\352\265\255 \354\213\254\354\202\254.js" diff --git "a/Juahjoah/_250513/PGS_43238_\354\236\205\352\265\255 \354\213\254\354\202\254.js" "b/Juahjoah/_250513/PGS_43238_\354\236\205\352\265\255 \354\213\254\354\202\254.js" new file mode 100644 index 0000000..b1cbb58 --- /dev/null +++ "b/Juahjoah/_250513/PGS_43238_\354\236\205\352\265\255 \354\213\254\354\202\254.js" @@ -0,0 +1,30 @@ +// 43238. 입국심사 + +function solution(n, times) { + var answer = 0; + + let start = 0; + let end = Math.max(...times) * n; + + while (start <= end) { + // mid 시간 동안 처리할 수 있는 사람의 수 + let mid = Math.floor((start + end) / 2); + let total = 0; + + for (t of times) { + total += Math.floor(mid / t); + if (total >= n) { + break; + } + } + + if (total >= n) { + answer = mid; + end = mid - 1; + } else { + start = mid + 1; + } + } + + return answer; +} \ No newline at end of file From 0ebb771ee122dd9d29f970739e1ddfd4169359c5 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Wed, 14 May 2025 22:53:14 +0900 Subject: [PATCH 18/22] =?UTF-8?q?=E2=9C=A8feat:=20BOJ=5F2346=5F=ED=92=8D?= =?UTF-8?q?=EC=84=A0=20=ED=84=B0=EB=9C=A8=EB=A6=AC=EA=B8=B0=5F=EC=95=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...60\353\234\250\353\246\254\352\270\260.py" | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 "Juahjoah/_250514/BOJ_2346_\355\222\215\354\204\240 \355\204\260\353\234\250\353\246\254\352\270\260.py" diff --git "a/Juahjoah/_250514/BOJ_2346_\355\222\215\354\204\240 \355\204\260\353\234\250\353\246\254\352\270\260.py" "b/Juahjoah/_250514/BOJ_2346_\355\222\215\354\204\240 \355\204\260\353\234\250\353\246\254\352\270\260.py" new file mode 100644 index 0000000..3431ee3 --- /dev/null +++ "b/Juahjoah/_250514/BOJ_2346_\355\222\215\354\204\240 \355\204\260\353\234\250\353\246\254\352\270\260.py" @@ -0,0 +1,43 @@ +# 2346. 풍선 터뜨리기 + +''' + * 문제 링크: https://www.acmicpc.net/problem/2346 + * 메모리: 34924 KB + * 시간: 56 ms + * 시간 복잡도: O(N) + * 공간 복잡도: O(N) + + * deque의 다양한 활용 방식 파악 + * deque.rotate()를 활용하여 인덱스 이동을 구현 + * rotate()는 양수일 경우 오른쪽으로, 음수일 경우 왼쪽으로 회전 + * 회전 후 인덱스는 0부터 시작 + +''' + +import sys +input = sys.stdin.readline + +from collections import deque + +N = int(input()) +input_list = list(map(int, input().split())) + +queue = deque() +for i in range(N): + queue.append((i + 1, input_list[i])) + +answer_list = [] + +while queue: + idx, move = queue.popleft() + answer_list.append(idx) + + if not queue: + break + + if move > 0: + queue.rotate(-(move - 1)) + else: + queue.rotate(-move) + +print(*answer_list) \ No newline at end of file From 370e6ae0524189c0fb6fac7e41662e38b9f81933 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Fri, 16 May 2025 16:01:24 +0900 Subject: [PATCH 19/22] =?UTF-8?q?=E2=9C=A8feat:=20PGS=5F42586=5F=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B0=9C=EB=B0=9C=5F=EC=95=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...60\353\212\245\352\260\234\353\260\234.py" | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 "Juahjoah/_250516/PGS_42586_\352\270\260\353\212\245\352\260\234\353\260\234.py" diff --git "a/Juahjoah/_250516/PGS_42586_\352\270\260\353\212\245\352\260\234\353\260\234.py" "b/Juahjoah/_250516/PGS_42586_\352\270\260\353\212\245\352\260\234\353\260\234.py" new file mode 100644 index 0000000..42bb239 --- /dev/null +++ "b/Juahjoah/_250516/PGS_42586_\352\270\260\353\212\245\352\260\234\353\260\234.py" @@ -0,0 +1,25 @@ +# 42586. 기능 개발 + +def solution(progresses, speeds): + answer = [] + days = 0 + cnt = 0 + + while progresses: + # 시간을 계산해서 맨 앞에 값을 확인하기 + if (progresses[0] + days * speeds[0]) >= 100: + # 작업 끝나면 리스트에서 제거하기 + progresses.pop(0) + speeds.pop(0) + + cnt += 1 + else: + if cnt > 0: + answer.append(cnt) + cnt = 0 + else: # 완료된 기능이 없는 경우에는 날짜 + 1 + days += 1 + + answer.append(cnt) + + return answer \ No newline at end of file From 96c25417bdfab200c75d6a3b44e8f9be0abd0bed Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Mon, 19 May 2025 20:38:05 +0900 Subject: [PATCH 20/22] =?UTF-8?q?=E2=9C=A8feat:=20PGS=5F42587=5F=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EC=84=B8=EC=8A=A4=5F=EC=95=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...04\353\241\234\354\204\270\354\212\244.py" | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "Juahjoah/_250519/PGS_42587_\355\224\204\353\241\234\354\204\270\354\212\244.py" diff --git "a/Juahjoah/_250519/PGS_42587_\355\224\204\353\241\234\354\204\270\354\212\244.py" "b/Juahjoah/_250519/PGS_42587_\355\224\204\353\241\234\354\204\270\354\212\244.py" new file mode 100644 index 0000000..51a4fe2 --- /dev/null +++ "b/Juahjoah/_250519/PGS_42587_\355\224\204\353\241\234\354\204\270\354\212\244.py" @@ -0,0 +1,62 @@ +# 42587. 프로세스 + +''' + * 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42587 + * 시간 복잡도: O(N) + * 공간 복잡도: O(N) + + * 다른 사람의 풀이를 참고하여 any()를 활용한 방법으로 구현 + * deque의 다양한 활용 방식 파악 + * any()를 활용하여 queue에 있는 값 중 현재 값보다 큰 값이 있는지 확인 + * queue에 있는 값 중 현재 값보다 큰 값이 있으면 append()로 다시 넣어주고 + * 없으면 answer를 1 증가시키고, 현재 값의 인덱스가 location과 같으면 answer를 return +''' + +# 2 +from collections import deque + +def solution(priorities, location): + answer = 0 + queue = deque([(p, i) for i, p in enumerate(priorities)]) + + while queue: + current = queue.popleft() + + if any(current[0] < q[0] for q in queue): + queue.append(current) + + else: + answer += 1 + if current[1] == location: + return answer + + return answer + + +# 1 +''' +from collections import deque + +def solution(priorities, location): + answer = 0 + # queue = deque([priorities]) + queue = deque([(p, i) for i, p in enumerate(priorities)]) + + while queue: + current = queue.popleft() + find_queue = False + + for q in queue: + if current[0] < q[0]: + find_queue = True + break + + if find_queue: + queue.append(current) + else: + answer += 1 + if current[1] == location: + return answer + + return answer +''' \ No newline at end of file From 266485c5d3a50b6ff0e8fe35cf3d9535516528b4 Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Mon, 19 May 2025 22:31:27 +0900 Subject: [PATCH 21/22] =?UTF-8?q?=E2=9C=A8feat:=20PGS=5F42587=5F=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EC=84=B8=EC=8A=A4=5F=EC=95=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...S_42587_\355\224\204\353\241\234\354\204\270\354\212\244.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Juahjoah/_250519/PGS_42587_\355\224\204\353\241\234\354\204\270\354\212\244.py" "b/Juahjoah/_250519/PGS_42587_\355\224\204\353\241\234\354\204\270\354\212\244.py" index 51a4fe2..79199ee 100644 --- "a/Juahjoah/_250519/PGS_42587_\355\224\204\353\241\234\354\204\270\354\212\244.py" +++ "b/Juahjoah/_250519/PGS_42587_\355\224\204\353\241\234\354\204\270\354\212\244.py" @@ -2,7 +2,7 @@ ''' * 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42587 - * 시간 복잡도: O(N) + * 시간 복잡도: O(N²) * 공간 복잡도: O(N) * 다른 사람의 풀이를 참고하여 any()를 활용한 방법으로 구현 From 3b641d9e4f227039611cc276a9a6c7a6090b507c Mon Sep 17 00:00:00 2001 From: Juahjoah <07juah21@gmail.com> Date: Mon, 19 May 2025 22:31:50 +0900 Subject: [PATCH 22/22] =?UTF-8?q?=E2=9C=A8feat:=20BOJ=5F1966=5F=ED=94=84?= =?UTF-8?q?=EB=A6=B0=ED=84=B0=20=ED=81=90=5F=EC=95=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=EC=A6=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\353\246\260\355\204\260 \355\201\220.py" | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 "Juahjoah/_250519/BOJ_1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" diff --git "a/Juahjoah/_250519/BOJ_1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" "b/Juahjoah/_250519/BOJ_1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" new file mode 100644 index 0000000..21385bc --- /dev/null +++ "b/Juahjoah/_250519/BOJ_1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" @@ -0,0 +1,37 @@ +# 1966. 프린터 큐 + +''' + * 문제 링크: https://www.acmicpc.net/problem/1966 + * 메모리: 34908 KB + * 시간: 64 ms + * 시간 복잡도: O(N²) + * 공간 복잡도: O(N) + + * 직전에 풀었던 프로세스와 동일한 유형의 문제 + * any와 enumerate를 활용 + * queue에 (문서, 인덱스) 형태로 넣어주고 + * 인덱스가 M인 문서가 출력될 때까지 cnt를 증가시킴 +''' + +import sys +input = sys.stdin.readline + +from collections import deque + +TC = int(input()) +for _ in range(TC): + N, M = map(int, input().split()) + input_list = list(map(int, input().split())) + + queue = deque([(q, i) for i, q in enumerate(input_list)]) + cnt = 0 + + while queue: + current = queue.popleft() + + if any(current[0] < q[0] for q in queue): + queue.append(current) + else: + cnt += 1 + if current[1] == M: + print(cnt)