diff --git a/LJEDD2/2024-2/README.md b/LJEDD2/2024-2/README.md index f93efc8c..9b55d03b 100644 --- a/LJEDD2/2024-2/README.md +++ b/LJEDD2/2024-2/README.md @@ -10,4 +10,12 @@ | 6차시 | 2024.08.03 | 완전탐색 | 피로도 | [#6](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/141) | | 7차시 | 2024.09.01 | 위상정렬 | 줄 세우기 | [#7](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/152) | | 8차시 | 2024.09.04 | 위상정렬 | 문제집 | [#8](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/154) | -| 9차시 | 2024.09.07 | 스택 | 원숭이 매달기 | [#9](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/156) | \ No newline at end of file +| 9차시 | 2024.09.07 | 스택 | 원숭이 매달기 | [#9](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/156) | +| 10차시 | 2024.09.11 | 우선순위 큐 | 카드 정렬하기 | [#10](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/159) | +| 11차시 | 2024.09.18 | 우선순위 큐 | N번째 큰 수 | [#11](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/161) | +| 12차시 | 2024.09.21 | 우선순위 큐 | 카드 합체 놀이 | [#12](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/164) | +| 13차시 | 2024.09.25 | 플로이드 워셜 | 친구 | [#13](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/167) | +| 14차시 | 2024.09.28 | 큐 | 카드1 | [#14](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/170) | +| 15차시 | 2024.10.02 | 브루트포스 | 세 개의 소수 문제 | [#15](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/174) | +| 16차시 | 2024.10.05 | 그리디 | 마지막 문제 | [#16](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/179) | +| 17차시 | 2024.11.02 | 너비우선탐색(BFS) | DSLR | [#16](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/185) | \ No newline at end of file diff --git "a/LJEDD2/2024-2/\352\267\270\353\246\254\353\224\224/\353\247\210\354\247\200\353\247\211 \353\254\270\354\240\234.py" "b/LJEDD2/2024-2/\352\267\270\353\246\254\353\224\224/\353\247\210\354\247\200\353\247\211 \353\254\270\354\240\234.py" new file mode 100644 index 00000000..e69de29b diff --git "a/LJEDD2/2024-2/\353\204\210\353\271\204\354\232\260\354\204\240\355\203\220\354\203\211(BFS)/DSLR.py" "b/LJEDD2/2024-2/\353\204\210\353\271\204\354\232\260\354\204\240\355\203\220\354\203\211(BFS)/DSLR.py" new file mode 100644 index 00000000..7858b385 --- /dev/null +++ "b/LJEDD2/2024-2/\353\204\210\353\271\204\354\232\260\354\204\240\355\203\220\354\203\211(BFS)/DSLR.py" @@ -0,0 +1,50 @@ +# BOJ 9019 +import sys +from collections import deque +input = sys.stdin.readline + +for _ in range(int(input())): + A, B = map(int,input().split()) + + visited = [False] * (10001) + queue = deque([(A,'')]) + visited[A] = True + +# 수식 참고 https://velog.io/@hamsangjin/%EB%B0%B1%EC%A4%80-9019%EB%B2%88-DSLR-%ED%8C%8C%EC%9D%B4%EC%8D%AC + while queue: + num, order = queue.popleft() + + if num == B: + print(order) + break + + # D: D 는 n을 두 배로 바꾼다. + # 결과 값이 9999 보다 큰 경우에는 10000 으로 나눈 나머지를 취한다. + # 그 결과 값(2n mod 10000)을 레지스터에 저장 + D = num * 2 % 10000 + if not visited[D]: + visited[D] = True + queue.append((D, order + 'D')) + + # S: S 는 n에서 1 을 뺀 결과 n-1을 레지스터에 저장한다. + # n이 0 이라면 9999 가 대신 레지스터에 저장 + S = (num - 1) % 10000 + if not visited[S]: + visited[S] = True + queue.append((S, order + 'S')) + + # L: L 은 n의 각 자릿수를 왼편으로 회전시켜 그 결과를 레지스터에 저장한다. + # 연산이 끝나면 레지스터에 저장된 네 자릿수는 왼편부터 d2, d3, d4, d1이 된다 + # 첫번째 자리를 끝으로 보내버리도록 + L = num // 1000 + (num % 1000)*10 + if not visited[L]: + visited[L] = True + queue.append((L, order + 'L')) + + # R: R 은 n의 각 자릿수를 오른편으로 회전시켜 그 결과를 레지스터에 저장한다. + # 이 연산이 끝나면 레지스터에 저장된 네 자릿수는 왼편부터 d4, d1, d2, d3이 된다. + # 마지막 숫자 데려오기 + R = num // 10 + (num % 10) * 1000 + if not visited[R]: + visited[R] = True + queue.append((R, order + 'R')) \ No newline at end of file diff --git "a/LJEDD2/2024-2/\352\271\212\354\235\264/\353\204\210\353\271\204 \354\232\260\354\204\240 \355\203\220\354\203\211(DFS/BFS)/\354\227\254\355\226\211\352\262\275\353\241\234.py" "b/LJEDD2/2024-2/\353\204\210\353\271\204\354\232\260\354\204\240\355\203\220\354\203\211(BFS)/\354\227\254\355\226\211\352\262\275\353\241\234.py" similarity index 100% rename from "LJEDD2/2024-2/\352\271\212\354\235\264/\353\204\210\353\271\204 \354\232\260\354\204\240 \355\203\220\354\203\211(DFS/BFS)/\354\227\254\355\226\211\352\262\275\353\241\234.py" rename to "LJEDD2/2024-2/\353\204\210\353\271\204\354\232\260\354\204\240\355\203\220\354\203\211(BFS)/\354\227\254\355\226\211\352\262\275\353\241\234.py" diff --git "a/LJEDD2/2024-2/\353\270\214\353\243\250\355\212\270\355\217\254\354\212\244/\354\204\270 \352\260\234\354\235\230 \354\206\214\354\210\230 \353\254\270\354\240\234.py" "b/LJEDD2/2024-2/\353\270\214\353\243\250\355\212\270\355\217\254\354\212\244/\354\204\270 \352\260\234\354\235\230 \354\206\214\354\210\230 \353\254\270\354\240\234.py" new file mode 100644 index 00000000..f84d5a64 --- /dev/null +++ "b/LJEDD2/2024-2/\353\270\214\353\243\250\355\212\270\355\217\254\354\212\244/\354\204\270 \352\260\234\354\235\230 \354\206\214\354\210\230 \353\254\270\354\240\234.py" @@ -0,0 +1,30 @@ +import sys +input = sys.stdin.readline + +# 하나의 소수를 여러 번 더할 수 있다. -> 브루트포스 가능 +# 5보다 큰 임의의 홀수로 세 소수의 합이 되는지 +def search(n): + for i in arr: + for j in arr: + for k in arr: + if i+j+k == n: + return i, j, k + + else: # 안되면 0 + return 0 + +# 에라토스테네스의 체 - 소수 판별 +prime = [True] * 1001 + +for i in range(2,101): + if prime[i]: + for j in range(i*2, 1001, i): + prime[j] = False + +# 소수 찾기 +arr = [i for i in range(2, 1001) if prime[i] == True] + +t = int(input()) +for _ in range(t): + n = int(input()) + print(*search(n)) \ No newline at end of file diff --git "a/LJEDD2/2024-2/\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/N\353\262\210\354\247\270 \355\201\260 \354\210\230.py" "b/LJEDD2/2024-2/\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/N\353\262\210\354\247\270 \355\201\260 \354\210\230.py" new file mode 100644 index 00000000..57ae8b31 --- /dev/null +++ "b/LJEDD2/2024-2/\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/N\353\262\210\354\247\270 \355\201\260 \354\210\230.py" @@ -0,0 +1,17 @@ +import sys, heapq +input = sys.stdin.readline + +n = int(input()) +heap = [] + +for _ in range(n): + for number in map(int, input().split()): + + if len(heap) < n: # 비교 대상이 모자랄 경우 + heapq.heappush(heap, number) #그대로 추가 + + else: + if number > heap[0]: # 제일 작은것보다 크면 + heapq.heapreplace(heap, number) #작은거 빼고 큰거 넣어줌 + +print(heap[0]) # 맨앞에 있는게 N번째로 큰놈 \ No newline at end of file diff --git "a/LJEDD2/2024-2/\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/\354\271\264\353\223\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" "b/LJEDD2/2024-2/\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/\354\271\264\353\223\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" new file mode 100644 index 00000000..ba42acf4 --- /dev/null +++ "b/LJEDD2/2024-2/\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/\354\271\264\353\223\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" @@ -0,0 +1,18 @@ +import sys +import heapq +input = sys.stdin.readline + +cards = list(int(input()) for _ in range(int(input().strip()))) # 데이터 입력받음 +heapq.heapify(cards) # 리스트를 힙구조로 바꿔주는 함수 + +result = 0 +while len(cards) > 1 : + f = heapq.heappop(cards) # 첫번째 뭉탱이 + s = heapq.heappop(cards) # 두번째 뭉탱이 + + result += f+s + + # 바꿔치기 횟수가 최소가 되게끔 + heapq.heappush(cards, f+s) + +print(result) \ No newline at end of file diff --git "a/LJEDD2/2024-2/\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/\354\271\264\353\223\234 \355\225\251\354\262\264 \353\206\200\354\235\264.py" "b/LJEDD2/2024-2/\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/\354\271\264\353\223\234 \355\225\251\354\262\264 \353\206\200\354\235\264.py" new file mode 100644 index 00000000..d0a62f16 --- /dev/null +++ "b/LJEDD2/2024-2/\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/\354\271\264\353\223\234 \355\225\251\354\262\264 \353\206\200\354\235\264.py" @@ -0,0 +1,17 @@ +import heapq +n, m = map(int,input().split()) + +#힙 구조로 변환 +numbers = list(map(int,input().split())) +heapq.heapify(numbers) + +for _ in range(m): + + x = heapq.heappop(numbers) + y = heapq.heappop(numbers) + + # x와 y 둘 다 값 교체 + heapq.heappush(numbers, x+y) + heapq.heappush(numbers, x+y) + +print(sum(numbers)) diff --git "a/LJEDD2/2024-2/\355\201\220/\354\271\264\353\223\2341.py" "b/LJEDD2/2024-2/\355\201\220/\354\271\264\353\223\2341.py" new file mode 100644 index 00000000..00868505 --- /dev/null +++ "b/LJEDD2/2024-2/\355\201\220/\354\271\264\353\223\2341.py" @@ -0,0 +1,14 @@ +import sys +from collections import deque +input = sys.stdin.readline + +n = int(input().strip()) +queue = deque([i for i in range(1, n+1)]) +result = [] + +while len(queue) > 1: + result.append(queue.popleft()) + queue.append(queue.popleft()) +else: + result.append(queue.popleft()) +print(" ".join(map(str, result))) \ No newline at end of file diff --git "a/LJEDD2/2024-2/\355\224\214\353\241\234\354\235\264\353\223\234 \354\233\214\354\205\234/\354\271\234\352\265\254.py" "b/LJEDD2/2024-2/\355\224\214\353\241\234\354\235\264\353\223\234 \354\233\214\354\205\234/\354\271\234\352\265\254.py" new file mode 100644 index 00000000..ccc60172 --- /dev/null +++ "b/LJEDD2/2024-2/\355\224\214\353\241\234\354\235\264\353\223\234 \354\233\214\354\205\234/\354\271\234\352\265\254.py" @@ -0,0 +1,21 @@ +import sys +input = sys.stdin.readline + +n = int(input()) +graph = [list(input().strip()) for _ in range(n)] +visited = [[0] * n for _ in range(n)] + +for k in range(n): + for i in range(n): + for j in range(n): + if i == j: + continue + + # 2-친구인 경우 + if graph[i][j] == 'Y' or (graph[i][k] == 'Y' and graph[k][j] == 'Y'): + visited [i][j] = 1 + +res = 0 +for row in visited: + res = max(res,sum(row)) +print(res) \ No newline at end of file