diff --git a/README.md b/README.md index 6257316..15939cc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -![image](https://user-images.githubusercontent.com/86403488/227709165-3b211671-4642-4186-abfa-fb4ae5b4a52f.png) # 알고리즘 문제 풀기 💯 성신여대 컴퓨터공학과 과동아리 INIT의 알고리즘 스터디입니다. @@ -14,7 +13,7 @@ ## ☑️ 참여방법 오프라인 : 목요일 오후 1시 성신여대 -온라인 : 목요일 오후 1시트구글미트 +온라인 : 목요일 오후 1시 구글미트 ## ☑️ Commit 규칙 #<매주 생성되는 해당 주차의 과제 공지 이슈 번호> : <백준문제번호>_<백준문제이름> @@ -42,37 +41,37 @@
❤️성원이니❤️
-

+

🧡지수이니🧡
-

+

💛지우이니💛
-

+

💚예원이티💚
-

+

💙유진이티💙
-

+

💜준희이티💜
-

+

🖤지윤이티🖤
-

+

diff --git "a/\354\235\264\353\213\210\354\204\261\354\233\220/15649_N\352\263\274M(1).py" "b/\354\235\264\353\213\210\354\204\261\354\233\220/15649_N\352\263\274M(1).py" new file mode 100644 index 0000000..beb2005 --- /dev/null +++ "b/\354\235\264\353\213\210\354\204\261\354\233\220/15649_N\352\263\274M(1).py" @@ -0,0 +1,13 @@ +import sys +import itertools +n,m=map(int,sys.stdin.readline().split()) #map(적용시킬 함수, 적용할 값들) : 입력받은 값을 정수타입으로 변환 +nums=[i for i in range(1,n+1)] #i = 1 ~ n + +arr=itertools.permutations(nums, m) #permutations(iterable, r) : iterable에서 원소개수가 r개인 순열 뽑기 +# print(list(arr)) + +for i in arr: + for j in i: + print(j,end=" ") + print() + diff --git "a/\354\235\264\353\213\210\354\247\200\354\210\230/15649_N\352\263\274M(1).py" "b/\354\235\264\353\213\210\354\247\200\354\210\230/15649_N\352\263\274M(1).py" new file mode 100644 index 0000000..8e61cbe --- /dev/null +++ "b/\354\235\264\353\213\210\354\247\200\354\210\230/15649_N\352\263\274M(1).py" @@ -0,0 +1,6 @@ +from itertools import permutations +n, m = map(int, input().split()) +arr = list(range(1, n+1)) +num = list(permutations(arr, m)) +for i in num: + print(' '.join(map(str,i))) \ No newline at end of file diff --git "a/\354\235\264\353\213\210\354\247\200\354\210\230/15650_N\352\263\274 M(2).py" "b/\354\235\264\353\213\210\354\247\200\354\210\230/15650_N\352\263\274 M(2).py" new file mode 100644 index 0000000..c2643b0 --- /dev/null +++ "b/\354\235\264\353\213\210\354\247\200\354\210\230/15650_N\352\263\274 M(2).py" @@ -0,0 +1,9 @@ +import itertools + +n, m = map(int, input().split()) +numlist = list(range(1, n+1)) +num = list(itertools.combinations(numlist ,m)) +for i in num: + for j in i: + print(j, end= ' ') + print() \ No newline at end of file diff --git "a/\354\235\264\353\213\210\354\247\200\354\210\230/1753_\354\265\234\353\213\250\352\262\275\353\241\234.py" "b/\354\235\264\353\213\210\354\247\200\354\210\230/1753_\354\265\234\353\213\250\352\262\275\353\241\234.py" new file mode 100644 index 0000000..191fb49 --- /dev/null +++ "b/\354\235\264\353\213\210\354\247\200\354\210\230/1753_\354\265\234\353\213\250\352\262\275\353\241\234.py" @@ -0,0 +1,42 @@ +#1753 + +import heapq +import sys +input = sys.stdin.readline +INF = int(1e9) + + +n,m = map(int, input().split()) +start = int(input()) +graph = [[] for i in range(n+1)] +distance = [INF]*(n+1) + +for _ in range(m): + a,b,c = map(int, input().split()) + graph[a].append((b,c)) + +def dijkstra(start): + q=[] + heapq.heappush(q, (0, start)) + distance[start]=0 + + while q: + dist, now = heapq.heappop(q) + if distance[now] < dist: + continue + for i in graph[now]: + cost = dist + i[1] + if cost < distance[i[0]]: + distance[i[0]] = cost + heapq.heappush(q, (cost, i[0])) + print(q) + +dijkstra(start) + +for i in range(1, n+1): + if distance[i]==INF: + print("INF") + else: + print(distance[i]) + + diff --git "a/\354\235\264\353\213\210\354\247\200\354\210\230/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" "b/\354\235\264\353\213\210\354\247\200\354\210\230/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" new file mode 100644 index 0000000..262b50b --- /dev/null +++ "b/\354\235\264\353\213\210\354\247\200\354\210\230/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" @@ -0,0 +1,15 @@ +n = int(input()) +num = map(int, input().split()) + +sum = 0 +for i in num: + zeroNum = 0 + if i == 1: + zeroNum +=1 + else: + for j in range(2, int(i)): + if i % j == 0: + zeroNum+=1 + if zeroNum == 0: + sum+=1 +print(sum) \ No newline at end of file diff --git "a/\354\235\264\353\213\210\354\247\200\354\210\230/5567_\352\262\260\355\230\274\354\213\235.py" "b/\354\235\264\353\213\210\354\247\200\354\210\230/5567_\352\262\260\355\230\274\354\213\235.py" new file mode 100644 index 0000000..c2bd080 --- /dev/null +++ "b/\354\235\264\353\213\210\354\247\200\354\210\230/5567_\352\262\260\355\230\274\354\213\235.py" @@ -0,0 +1,43 @@ +# 5567 결혼식 + +# 입력 값 + +# 6 +# 5 +# 1 2 +# 1 3 +# 3 4 +# 2 3 +# 4 5 + +import sys +from collections import deque + +N = int(sys.stdin.readline()) +M = int(sys.stdin.readline()) + +graph = [[False] * (N + 1) for _ in range(N + 1)] + +for _ in range(M): + a, b = map(int, sys.stdin.readline().split()) + graph[a].append(b) # a 인덱스에 b 넣기 + graph[b].append(a) # b 인덱스에 a 넣기 + +visited = [0] * (N + 1) # false 대신 0 넣기 -> 더해야돼서! + +def bfs(V): + q = deque([V]) + visited[V] = 1 + while q: + V = q.popleft() + for i in graph[V]: + if visited[i] == 0: + q.append(i) + visited[i] = visited[V] + 1 +bfs(1) +result = 0 +for i in range(2,N+1): + # 본인이거나 친구거나, 친구의 친구거나 경우의 수가 최대 3개 + if 0 < visited[i] <=3: + result += 1 +print(result) diff --git "a/\354\235\264\353\213\210\354\247\200\354\210\230/5567\353\274\210\353\214\200.py" "b/\354\235\264\353\213\210\354\247\200\354\210\230/5567\353\274\210\353\214\200.py" new file mode 100644 index 0000000..8fc1a8e --- /dev/null +++ "b/\354\235\264\353\213\210\354\247\200\354\210\230/5567\353\274\210\353\214\200.py" @@ -0,0 +1,38 @@ +# 5567 결혼식 + +# 입력 값 + +# 6 +# 5 +# 1 2 +# 1 3 +# 3 4 +# 2 3 +# 4 5 + +import sys +from collections import deque + +# N 과 M 입력 받는 방법 다름 +N = +M = + +graph = [[False] * (N + 1) for _ in range(N + 1)] + +for _ in range(M): + a, b = map(int, sys.stdin.readline().split()) + #그래프 초기 세팅 다름 + +visited = [0] * (N + 1) # false 대신 0 + +def bfs(V): + q = deque([V]) + visited[V] = 1 # 숫자 덧셈에 필요 + while q: + V = q.popleft() + for i in range(1, N + 1): #for문 범위 수정 + if not visited[i] and graph[V][i]: # visited[i] 관련 조건 다름 + q.append(i) + visited[i] = # visited[i] 구하는 방법 다름 +bfs(1) +# 추가 코드 diff --git "a/\354\235\264\353\213\210\354\247\200\354\210\230/\354\204\254 \354\227\260\352\262\260\355\225\230\352\270\260.py" "b/\354\235\264\353\213\210\354\247\200\354\210\230/\354\204\254 \354\227\260\352\262\260\355\225\230\352\270\260.py" new file mode 100644 index 0000000..b57a025 --- /dev/null +++ "b/\354\235\264\353\213\210\354\247\200\354\210\230/\354\204\254 \354\227\260\352\262\260\355\225\230\352\270\260.py" @@ -0,0 +1,26 @@ +parent=[] + +def find(parent,x): + if(parent[x]==x): + return x + return find(parent,parent[x]) + +def union(parent,a,b): + rootA=find(parent,a) + rootB=find(parent,b) + if(rootA= 2: + del result[t-2] + +pick(1) diff --git "a/\354\235\264\355\213\260\354\230\210\354\233\220/1966_\355\224\204\353\246\260\355\204\260\355\201\220.py" "b/\354\235\264\355\213\260\354\230\210\354\233\220/1966_\355\224\204\353\246\260\355\204\260\355\201\220.py" new file mode 100644 index 0000000..24a2b64 --- /dev/null +++ "b/\354\235\264\355\213\260\354\230\210\354\233\220/1966_\355\224\204\353\246\260\355\204\260\355\201\220.py" @@ -0,0 +1,41 @@ +import sys + +#테스트 케이스 개수 +total = int(input()) +arr = [] + +for a in range(total): + + #문서의 개수 n, 궁금한 문서의 인덱스m + n, m = map(int, input().split()) + + #문서의 인덱스와 중요도를 묶은 리스트 + arr = list(enumerate(list(map(int,input().split())))) + + #순서를 알고싶은 문서의 인덱스와 중요도를 묶은 리스트 + printer = arr[m] + + #count) 해당 문서가 인쇄된 순서를 저장 + count = 0 + + while len(arr): + + #big) 배열의 가장 높은 우선순위 + big = max(i[1] for i in arr) + + #제일 앞에 있는 문서의 우선순위가 가장 높다면 + if arr[0][1] == big: + #해당 문서를 pop() + nowIdx = arr.pop(0) + count += 1 + + if nowIdx == printer: + print(count) + break + + #제일 앞에 있는 문서의 우선순위가 가장 높지 않다면 + else: + #제일 앞에서 빼고 + nowIdx = arr.pop(0) + #제일 마지막에 넣어준다 + arr.append(nowIdx) diff --git "a/\354\235\264\355\213\260\354\230\210\354\233\220/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" "b/\354\235\264\355\213\260\354\230\210\354\233\220/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" new file mode 100644 index 0000000..f87c378 --- /dev/null +++ "b/\354\235\264\355\213\260\354\230\210\354\233\220/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" @@ -0,0 +1,23 @@ +import sys + +n = int(input()) +print(n) +m = [*map(int,sys.stdin.readline().split())] +print(m) +count = 0 + +for i in m: + if i != 1 and i != 2: + for a in range(i): + if a != 0 and a != 1: + if i % a == 0: + break + elif a == i-1: + count += 1 + break + else: + count += 1 + elif i == 2: + count += 1 + +print(count) diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/10026_\354\240\201\353\241\235\354\203\211\354\225\275.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/10026_\354\240\201\353\241\235\354\203\211\354\225\275.py" new file mode 100644 index 0000000..b8e1f30 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/10026_\354\240\201\353\241\235\354\203\211\354\225\275.py" @@ -0,0 +1,44 @@ +import sys +from collections import deque + +n = int(sys.stdin.readline()) +visited = [[False] * n for _ in range(n)] +grid = [list(map(str, input())) for _ in range(n)] +queue = deque() + +dx = [-1, 1, 0, 0] +dy = [0, 0, -1, 1] + +def bfs(x, y): + queue.append([x, y]) + while queue: + x, y = queue.popleft() + for i in range(4): + nx = x + dx[i] + ny = y + dy[i] + if 0 <= nx < n and 0 <= ny < n and not visited[nx][ny] and grid[nx][ny] == grid[x][y]: + queue.append([nx, ny]) + visited[nx][ny] = True + +count = 0 +for i in range(n): + for j in range(n): + if not visited[i][j]: + bfs(i, j) + count += 1 +print(count, end=' ') + +for i in range(n): + for j in range(n): + if grid[i][j] == 'R': + grid[i][j] = 'G' + +visited = [[False] * n for _ in range(n)] + +count = 0 +for i in range(n): + for j in range(n): + if not visited[i][j]: + bfs(i, j) + count += 1 +print(count) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/11279_\354\265\234\353\214\200 \355\236\231.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/11279_\354\265\234\353\214\200 \355\236\231.py" new file mode 100644 index 0000000..a2239aa --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/11279_\354\265\234\353\214\200 \355\236\231.py" @@ -0,0 +1,16 @@ +import sys +import heapq + +n = int(sys.stdin.readline()) +heap = [] + +# -1을 곱해 최소 힙으로 최대 힙 구현 +for i in range (n): + x = int(sys.stdin.readline()) + if x == 0: # x가 0일 때 + if heap: # 배열에서 가장 큰 값 출력하고 그 값을 배열에서 삭제 + print((-1)*heapq.heappop(heap)) + else: # 배열이 비어있을 경우 0 출력 + print(0) + elif x > 0: # x가 자연수일 때 + heapq.heappush(heap,(-1)*x) # 배열에 x라는 값 추가 diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/11650_\354\242\214\355\221\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/11650_\354\242\214\355\221\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" new file mode 100644 index 0000000..ea57f3b --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/11650_\354\242\214\355\221\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" @@ -0,0 +1,45 @@ +import sys + +n = int(sys.stdin.readline()) #n 입력 + +arr = [list(map(int,input().split())) for i in range(n)] #2차원 평면 위의 점 n개 입력 [[3,4],[1,1]] + +#병합정렬_merge +def merge(left, right): + i, j = 0, 0 + sorted_list = [] + while(i < len(left)) and (j < len(right)): + if left[i] < right[j]: + sorted_list.append(left[i]) + i += 1 + else: + sorted_list.append(right[j]) + j += 1 + if i == len(left): + while j < len(right): + sorted_list.append(right[j]) + j += 1 + elif j == len(right): + while i < len(left): + sorted_list.append(left[i]) + i += 1 + return sorted_list + +#병합정렬_merge sort +def merge_sort(arr): + if len(arr) <= 1: + return arr + #분할하고 분할된 리스트 각각 정렬 + mid = len(arr) // 2 + left = merge_sort(arr[:mid]) + right = merge_sort(arr[mid:]) + #병합 + return merge(left,right) + +#정렬 +arr = merge_sort(arr) +#좌표 출력 +for x, y in arr: + print(x,y) + + diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/1431_\354\213\234\353\246\254\354\226\274 \353\262\210\355\230\270.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/1431_\354\213\234\353\246\254\354\226\274 \353\262\210\355\230\270.py" new file mode 100644 index 0000000..6f3a063 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/1431_\354\213\234\353\246\254\354\226\274 \353\262\210\355\230\270.py" @@ -0,0 +1,22 @@ +import sys + +n = int(sys.stdin.readline()) #기타 개수 n 입력 +s = [input() for i in range(n)] #시리얼 번호 n개 입력 + +#정렬 2_자릿수 합 +def sum(x): + r = 0 + for i in x: + if i.isdigit(): #isdigit(): 문자열이 숫자인지 판별 + r += int (i) + return r + +#정렬_ 1.길이 2.자릿수 합 3.사전순 +s.sort(key = lambda x: (len(x), sum(x), x)) + +#정렬된 리스트 s의 모든 요소 출력 +for i in s: + print(i) + + + diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/15649_N\352\263\274 M(1).py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/15649_N\352\263\274 M(1).py" new file mode 100644 index 0000000..9621a29 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/15649_N\352\263\274 M(1).py" @@ -0,0 +1,18 @@ +import itertools +#from itertools import permutations + +n,m = map(int, input().split()) + +a = [] +for i in range(1,n+1): + a.append(i) + +pe = itertools.permutations(a,m) + +#print("hello",end='') +#print(*list(pe)) + +for i in pe: + for j in i: + print(j,end = ' ') + print() \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/15650_N\352\263\274 M(2).py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/15650_N\352\263\274 M(2).py" new file mode 100644 index 0000000..5cba603 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/15650_N\352\263\274 M(2).py" @@ -0,0 +1,12 @@ +from itertools import combinations #itertools의 combinations 함수 + +n,m = map(int, input().split()) # N과 M 입력받기 + +a = [] # [1,2,3,4 ..] +for i in range(1,n+1): + a.append(i) + +for i in combinations(a,m): # a에서 원소 개수 m개인 조합을 뽑는 것, 출력 + for j in i: + print(j,end=' ') + print() \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/15723_n\353\213\250 \353\205\274\353\262\225.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/15723_n\353\213\250 \353\205\274\353\262\225.py" new file mode 100644 index 0000000..a4398c5 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/15723_n\353\213\250 \353\205\274\353\262\225.py" @@ -0,0 +1,27 @@ +import sys + +input = sys.stdin.readline +INF = int(1e9) + +N = int(sys.stdin.readline()) + +alphabet = "abcdefghijklmnopqrstuvwxyz" +n = len(alphabet) +graph = [[INF] * n for _ in range(n)] + +for _ in range(N): + a, b = map(alphabet.index, input().rstrip().split(" is ")) + graph[a][b] = 1 + +for k in range(n): + for i in range(n): + for j in range(n): + graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j]) + +M = int(input()) +for _ in range(M): + a, b = map(alphabet.index, input().rstrip().split(" is ")) + if graph[a][b] == INF: + print("F") + else: + print("T") diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/1654_\353\236\234\354\204\240 \354\236\220\353\245\264\352\270\260.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/1654_\353\236\234\354\204\240 \354\236\220\353\245\264\352\270\260.py" new file mode 100644 index 0000000..f05b0c8 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/1654_\353\236\234\354\204\240 \354\236\220\353\245\264\352\270\260.py" @@ -0,0 +1,22 @@ +import sys + +K, N = map(int, input().split()) + +lan = [int(sys.stdin.readline()) for _ in range(K)] + +def binary_search(start, end, N): + result = 0 + while start <= end: + mid = (start + end) // 2 + lines = sum([(i // mid) for i in lan]) + + if lines >= N: + result = mid + start = mid + 1 + else: + end = mid - 1 + + return result + +answer = binary_search(1, max(lan), N) +print(answer) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/1931_\355\232\214\354\235\230\354\213\244 \353\260\260\354\240\225.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/1931_\355\232\214\354\235\230\354\213\244 \353\260\260\354\240\225.py" new file mode 100644 index 0000000..7870a03 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/1931_\355\232\214\354\235\230\354\213\244 \353\260\260\354\240\225.py" @@ -0,0 +1,19 @@ +import sys +N = int(sys.stdin.readline()) + +meetings = [] + +for _ in range(N): + start, end = map(int, input().split(" ")) + meetings.append((start, end)) + +meetings.sort(key=lambda x: (x[1], x[0])) + +time = 0 +cnt = 0 +for i in meetings: + if time <= i[0]: + time = i[1] + cnt += 1 + +print(cnt) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" new file mode 100644 index 0000000..cffb0e8 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" @@ -0,0 +1,19 @@ +import sys +from collections import deque + +t = int(sys.stdin.readline()) #테스트 케이스 수 t + +for i in range(t): + n, m = map(int,input().split()) + queue = deque(list(map(int,input().split()))) #문서 중요도 queue + index_queue = deque(list(range(n))) #인덱스 idx_queue + cnt = 0 #인쇄 순서 cnt + while queue: + if queue[0] == max(queue): #queue의 첫번째 원소가 최댓값인 경우(가장 앞에 있는 문서의 중요도가 가장 클 경우) pop + cnt += 1 #pop할 때마다 cnt 1씩 증가 + queue.popleft() + if index_queue.popleft() == m: #pop한 문서의 인덱스가 m과 같다면 cnt 출력 + print(cnt) + else: + queue.append(queue.popleft()) #queue의 첫번째 원소가 최댓값 아닌 경우 맨 뒤로 재배치 + index_queue.append(index_queue.popleft()) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" new file mode 100644 index 0000000..66d5447 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" @@ -0,0 +1,13 @@ +n = int(input()) # 수의 개수 N 입력 받기 +numbers = map(int, input().split()) # N개의 수 입력 받기 +count = 0 # 소수의 개수를 세기 위한 변수 count 초기화 + +for num in numbers: + a = 0 + if num > 1 : + for i in range(2, num): # 2부터 (num-1)까지 (자기자신 제외) + if num % i == 0: + a += 1 # 2와 (num-1) 사이 숫자로 나누어 떨어지면 a 1씩 증가 + if a == 0: + count += 1 # a == 0 이면 소수이므로 count 1씩 증가 +print(count) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/2579_\352\263\204\353\213\250 \354\230\244\353\245\264\352\270\260.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/2579_\352\263\204\353\213\250 \354\230\244\353\245\264\352\270\260.py" new file mode 100644 index 0000000..de27070 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/2579_\352\263\204\353\213\250 \354\230\244\353\245\264\352\270\260.py" @@ -0,0 +1,51 @@ +import sys + +#계단 개수 n 입력받기 +n = int(sys.stdin.readline()) + +#각 계단 점수 리스트에 입력받기 +s = [0] * 1000 # s = [] IndexError: 빈 리스트에 인덱스 지정하여 오류 -> 1. append 함수 이용 2. 리스트 미리 설정 +for i in range(n): + s[i] = int(sys.stdin.readline()) + +#점수 총합 최댓값 구하는 리스트 +dp = [0] * 1000 + +#계단 1개일 때 +dp[0] = s[0] #점수 총합 최댓값 = 첫번째 계단 점수 + +#계단 2개일 때 +dp[1] = s[0] + s[1] #점수 총합 최댓값 = 첫번째 계단 점수 + 두번째 계단 점수 + +#계단 3개 이상인 경우 +for i in range(2,n): + dp[i] = s[i] + max(dp[i-3]+s[i-1] , dp[i-2]) + +#계단 n개일 때 점수 총합 최댓값 출력 +print(dp[n-1]) + +''' +ex)계단 3개일 때 +i) 3<-2<-시작 +ii) 3<-1<-시작 +dp[2] = s[2] + max(s[1],s[0]) + +ex)계단 4개일 때 +i) 4<-3<-1<-시작 +ii) 4<-2<-1<-시작 +iii) 4<-2<-시작 +dp[3] = s[3] + max(s[0]+s[2], s[0]+s[1]) +dp[3] = s[3] + max(dp[0]+s[2], dp[1]) + +ex)계단 6개일 때 +i) 6<-5<-3<-2<-시작 +ii) 6<-5<-3<-1<-시작 +i, ii: 6<-5<-(n=3일 때 계단 오르기 경우의 수) +----------------------------------------- +iii) 6<-4<-3<-1<-시작 +iv) 6<-4<-2<-1<-시작 +v) 6<-4<-2<-시작 +iii, iv, v: 6<-(n=4일 때 계단 오르기 경우의 수) +dp[5] = s[5] + max(dp[2]+s[4], dp[3]) + +''' \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/2606_\353\260\224\354\235\264\353\237\254\354\212\244_BFS.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/2606_\353\260\224\354\235\264\353\237\254\354\212\244_BFS.py" new file mode 100644 index 0000000..758d0f2 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/2606_\353\260\224\354\235\264\353\237\254\354\212\244_BFS.py" @@ -0,0 +1,31 @@ +import sys +from collections import deque + +n = int(sys.stdin.readline()) +m = int(sys.stdin.readline()) +graph = [[] for i in range(n+1)] +visited = [False]*(n+1) + + +for i in range(m): + a, b = map(int, input().split()) + + graph[a].append(b) + graph[b].append(a) + +def bfs(graph, v): + cnt = 0 + queue = deque([v]) + + while queue: + pop = queue.popleft() + visited[pop] = True + + for i in graph[pop]: + if visited[i]==False: + visited[i] = True + queue.append(i) + cnt += 1 + print(cnt) + +bfs(graph, 1) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\234\240\354\247\204/2606_\353\260\224\354\235\264\353\237\254\354\212\244_DFS.py" "b/\354\235\264\355\213\260\354\234\240\354\247\204/2606_\353\260\224\354\235\264\353\237\254\354\212\244_DFS.py" new file mode 100644 index 0000000..106e2c1 --- /dev/null +++ "b/\354\235\264\355\213\260\354\234\240\354\247\204/2606_\353\260\224\354\235\264\353\237\254\354\212\244_DFS.py" @@ -0,0 +1,19 @@ +import sys + +n=int(sys.stdin.readline()) +m=int(sys.stdin.readline()) +graph = [[] for i in range(n+1)] +visited=[0]*(n+1) + +for i in range(m): + a,b=map(int,input().split()) + graph[a]+=[b] + graph[b]+=[a] + +def dfs(m): + visited[m]=1 + for i in graph[m]: + if visited[i]==0: + dfs(i) +dfs(1) +print(sum(visited)-1) diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/11279_\354\265\234\353\214\200 \355\236\231.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/11279_\354\265\234\353\214\200 \355\236\231.py" new file mode 100644 index 0000000..49d8518 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/11279_\354\265\234\353\214\200 \355\236\231.py" @@ -0,0 +1,55 @@ +#2023-04-15-Week2-과제 +#11279_최대 힙 + +''' +배열에 자연수 x를 넣는다. +배열에서 가장 큰 값을 출력하고, 그 값을 배열에서 제거한다. +프로그램은 처음에 비어있는 배열에서 시작하게 된다. + +첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. +다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 +주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, +x가 0이라면 배열에서 가장 큰 값을 출력하고 +그 값을 배열에서 제거하는 경우이다. +입력되는 자연수는 231보다 작다. + +입력에서 0이 주어진 회수만큼 답을 출력한다. +만약 배열이 비어 있는 경우인데 +가장 큰 값을 출력하라고 한 경우에는 0을 출력하면 된다. +''' + + +''' +import heapq +heap = [] +num = int(input()) + +for i in range(num) : + a = int(input()) + if a==0: + if heap : + print(heapq.heappop(heap)[1]) + else : + print(0) + elif a>0 : + heapq.heappush(heap, (-a,a)) +''' + +#채점 결과 시간 초과 +#input() -> sys.stdin.readline() + +import heapq +import sys +heap = [] +num = int(sys.stdin.readline()) + +for i in range(num) : + a = int(sys.stdin.readline()) + if a==0: #a가 0이라면 + if heap : + print(heapq.heappop(heap)[1]) # 배열에서 가장 큰 값을 출력하고 그 값을 배열에서 제거하는 경우이다. + else : # + print(0) + elif a>0 : #a가 자연수라면 + heapq.heappush(heap, (-a,a)) #a라는 값을 넣는 연산 + \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/11650_\354\242\214\355\221\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/11650_\354\242\214\355\221\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" new file mode 100644 index 0000000..4bf98d4 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/11650_\354\242\214\355\221\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" @@ -0,0 +1,31 @@ +#2023-04-27-Week3-과제 +#11650_좌표 정렬하기 + +''' +문제 +2차원 평면 위의 점 N개가 주어진다. +좌표를 x좌표가 증가하는 순으로, +x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 +출력하는 프로그램을 작성하시오. + +입력 +첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. +둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. +(-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, +위치가 같은 두 점은 없다. + +출력 +첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다. +''' + +N = int(input()) +array = [] + +for i in range(N): + a,b = map(int,input().split()) + array.append((a,b)) + +array.sort() + +for j in range(N): + print(array[j][0],array[j][1]) #a b 출력 \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/11729_\355\225\230\353\205\270\354\235\264\355\203\221.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/11729_\355\225\230\353\205\270\354\235\264\355\203\221.py" new file mode 100644 index 0000000..981f7e9 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/11729_\355\225\230\353\205\270\354\235\264\355\203\221.py" @@ -0,0 +1,55 @@ +#2023-04-27-Week3 +#11729_하노이 탑.py + + +''' +하노이탑 원판 1개인 경우 -> top(1, 1, 2, 3) +이동 과정 +1. 1번 1->3 + +하노이탑 원판 2개인 경우 -> top(2, 1, 2, 3) +이동 과정 +1. 1번 1->2 +2. 2번 1->3 +3. 1번 2->3 + +하노이탑 원판 3개인 경우 -> top(3, 1, 2, 3) +이동 과정 +1. 1번 1->3 +2. 2번 1->2 +3. 1번 3->2 +4. 3번 1->3 +5. 1번 2->1 +6. 2번 2->3 +7. 1번 1->3 + +''' + +n = int(input()) + +def cnt(n) : + if n==1 : + k = 2 + elif n<=0 : + k = 1 + else : + k = 2*cnt(n-1) + return k + +def top(n, a, b, c) : + if n==1 : + print(a,c) + else : + #else 코드는 스스로 작성하지 못함 + top(n-1,a,c,b) + print(a,c) + top(n-1,b,a,c) + +''' +함수 쓰지 않고 바로 계산해도 됨 +sum = 2**n-1 +print(sum) +''' +print(cnt(n)) +top(n, 1, 2, 3) + diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/1431_\354\213\234\353\246\254\354\226\274 \353\262\210\355\230\270.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/1431_\354\213\234\353\246\254\354\226\274 \353\262\210\355\230\270.py" new file mode 100644 index 0000000..90313b7 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/1431_\354\213\234\353\246\254\354\226\274 \353\262\210\355\230\270.py" @@ -0,0 +1,58 @@ +#2023-04-27-Week3-과제 +#1431_시리얼 번호 + +''' +문제 +다솜이는 기타를 많이 가지고 있다. +그리고 각각의 기타는 모두 다른 시리얼 번호를 가지고 있다. +다솜이는 기타를 빨리 찾아서 빨리 사람들에게 연주해주기 위해서 +기타를 시리얼 번호 순서대로 정렬하고자 한다. + +모든 시리얼 번호는 알파벳 대문자 (A-Z)와 숫자 (0-9)로 이루어져 있다. +시리얼번호 A가 시리얼번호 B의 앞에 오는 경우는 다음과 같다. + +A와 B의 길이가 다르면, 짧은 것이 먼저 온다. + +만약 서로 길이가 같다면, +A의 모든 자리수의 합과 B의 모든 자리수의 합을 비교해서 +작은 합을 가지는 것이 먼저온다. (숫자인 것만 더한다) + +만약 1,2번 둘 조건으로도 비교할 수 없으면, +사전순으로 비교한다. 숫자가 알파벳보다 사전순으로 작다. +시리얼이 주어졌을 때, 정렬해서 출력하는 프로그램을 작성하시오. + +입력 +첫째 줄에 기타의 개수 N이 주어진다. +N은 50보다 작거나 같다. +둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. +시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어져 있다. +시리얼 번호는 중복되지 않는다. + +출력 +첫째 줄부터 차례대로 N개의 줄에 한줄에 하나씩 +시리얼 번호를 정렬한 결과를 출력한다. +''' + +#익명 함수 호출을 위한 lambda / 정렬을 위한 sort 사용 가능 + +import sys + +#N = int(input()) +N = int((sys.stdin.readline())) + +a = [] + +for i in range(N) : + a.append(sys.stdin.readline()) + +def sum (x) : + sum = 0 + for i in x : + if (x>='0') and (x<='9') : + sum += int(x) + return sum + +a = sorted(list, key= lambda x: (len(x), sum(x), x)) + +for i in a : + print(i) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/15649_N\352\263\274 M(1).py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/15649_N\352\263\274 M(1).py" new file mode 100644 index 0000000..657397f --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/15649_N\352\263\274 M(1).py" @@ -0,0 +1,25 @@ +#2023-04-06-Week1 +#15649_N과 M(1) + +#itertools의 permutations 함수를 사용해서 풀어보자 +#permutations(iterable, r) : iterable에서 원소 개수가 r개인 순열을 뽑는 것 + +import itertools +import sys +#from itertools import permutations -> 함수 사용시 도트연산자 앞부분 생략 가능 + +n, m = map(int, input().split()) + +nums = [i for i in range(1, n+1)] + +nums = [] +for i in range(1, n+1) : + nums.append(i) + +arr = itertools.permutations(nums, m) + + +for i in arr : #리스트 원소 개수 -> set이 하나 + for j in i : + print(j, end=' ') + print() \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/15650_N\352\263\274 M(2).py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/15650_N\352\263\274 M(2).py" new file mode 100644 index 0000000..38afafe --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/15650_N\352\263\274 M(2).py" @@ -0,0 +1,45 @@ +#2023-04-08-Week1-과제 +#15650_N과 M(2) + +''' +자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. + +1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 +고른 수열은 오름차순이어야 한다. + +입력 : 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) +출력 : 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. + +수열은 사전 순으로 증가하는 순서로 출력해야 한다. + +''' + + +''' +#feedback ) combinations 만 사용해도 풀이 가능 +from itertools +n,m = map(int,input().split()) +num = itertools.combinations([i for i in range(1,n+1)],m) + +for i in num : + j = itertools.permutations(i) #permutation 가능한 모든 순열 + for k in j : + if k == sorted(k) : #오름차순으로 정렬된 경우면 출력 + print(" ".join(map(str, k))) + #map k의 요소들을 문자열로 반환 + #join 리스트 요소를 문자열로 연결 + #" "로 요소 사이에 구분자 +''' +from itertools import combinations + +n,m = map(int,input().split()) + +arr = [] +for i in range(1,n+1): + arr.append(i) + +for i in combinations(arr,m): + for j in i: + print(j, end=' ') + print() + diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" new file mode 100644 index 0000000..7cd2703 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" @@ -0,0 +1,58 @@ +#2023-04-15-Week2-과제 +#1966_프린터 큐 + +''' +여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 +인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. +여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 +FIFO - First In First Out - 에 따라 인쇄가 되게 된다. +하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, +이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. + +현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다. +나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, +이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. +그렇지 않다면 바로 인쇄를 한다. +예를 들어 Queue에 4개의 문서(A B C D)가 있고, 중요도가 2 1 4 3 라면 C를 인쇄하고, +다음으로 D를 인쇄하고 A, B를 인쇄하게 된다. + +여러분이 할 일은, 현재 Queue에 있는 문서의 수와 중요도가 주어졌을 때, +어떤 한 문서가 몇 번째로 인쇄되는지 알아내는 것이다. +예를 들어 위의 예에서 C문서는 1번째로, A문서는 3번째로 인쇄되게 된다. + +입력 +첫 줄에 테스트케이스의 수가 주어진다. 각 테스트케이스는 두 줄로 이루어져 있다. +테스트케이스의 첫 번째 줄에는 문서의 개수 N(1 ≤ N ≤ 100)과, +몇 번째로 인쇄되었는지 궁금한 문서가 현재 Queue에서 +몇 번째에 놓여 있는지를 나타내는 정수 M(0 ≤ M < N)이 주어진다. +이때 맨 왼쪽은 0번째라고 하자. 두 번째 줄에는 N개 문서의 중요도가 차례대로 주어진다. +중요도는 1 이상 9 이하의 정수이고, 중요도가 같은 문서가 여러 개 있을 수도 있다. + +''' + +#큐 = FIFO + +t = int(input()) + +for i in range(t): + + n, m = map(int, input().split()) + queue = list(map(int, input().split())) + cnt = 0 + + while m != -1: + if queue[0] == max(queue): + del queue[0] + m -= 1 + cnt += 1 + else: + queue.append(queue[0]) + del queue[0] + + if m==0 : + m = len(queue) -1 + else : + m -= 1 + +#print(cnt) -> 오답 원인 : print문 위치 + print(cnt) diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" new file mode 100644 index 0000000..284f05f --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" @@ -0,0 +1,40 @@ +#2023-04-08-Week1-과제 +#1978_소수 찾기 + +''' +입력 1 - 수의 개수 N < 100 +입력 2 - 1000 이하의 자연수 N개 +결과 - 입력2의 자연수 중 소수의 개수 출력 +''' + +n = int(input()) +#feedback ) n = int(input("입력 : \n")) -> input 내부에 추가적인 멘트 작성 x + +num = list(map (int, input().split())) # 입력 받는 값 여러 개 -> map 함수 : 자료형, 함수 (.split() 공백으로 구분) + +result = 0 # 입력한 자연수 중 소수의 개수 + +for i in num : # 입력 받은 수들을 소수 확인 대상 i로 설정 + cnt = 0 # 소수 확인 대상의 약수 개수 + if i == 1 : # 1은 소수 아님 + continue + + for j in range (2, i+1) : # 2~i까지 + if (i%j == 0) : # 소수 확인 대상이 2부터 자기 자신으로 나눴을 때 0 이 되면 + cnt += 1 # 약수 개수 증가 + + if cnt == 1 : # 약수의 개수 1개 + result += 1 # 소수 개수 추가 + +print (result) # 출력 : 입력 자연수 중 소수의 개수 + +#feedback ) print ("출력 : ", result) -> 출력시 추가적인 멘트 x + + + + + + + + + diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/2579_\352\263\204\353\213\250 \354\230\244\353\245\264\352\270\260.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/2579_\352\263\204\353\213\250 \354\230\244\353\245\264\352\270\260.py" new file mode 100644 index 0000000..301b097 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/2579_\352\263\204\353\213\250 \354\230\244\353\245\264\352\270\260.py" @@ -0,0 +1,72 @@ + +#2023-05-04-Week3-과제 +#2579_계단 오르기 + + +import sys +input = sys.stdin.readline + +n = int(input()) #계단 개수 +score = [0 for i in range(301)] #계단 점수 리스트 -> 계단의 개수 300이하의 자연수 +dynamic = [0 for i in range(301)] #동적 계획법 리스트 -> 계단의 개수 300이하의 자연수 + +for i in range(n) : + score[i] = int(input()) #계단 개수만큼 점수 입력 + +''' +마지막 도착 계단은 반드시 밟아야 함 +-> 계단 개수 입력 값이 a일 때 + 마지막 도착 계단인 a번 계단을 x번째 차례에 밟은 계단이라고 하면 + x-1번째 차례에는 a-1번 계단이나 a-2번 계단을 밟았을 것 +-> a-1번 계단을 밟았다면 a-2번째 계단은 밟을 수 없음 + +해당 인덱스번째 계단까지의 최댓값을 +동적 계획법 리스트에 저장 + +i번 계단까지 최댓값 += i-2번 계단까지 점수를 고려한 최댓값 + i번 계단의 점수 , + i-3번 계단까지 점수를 고려한 최댓값 + i-1번 계단의 점수 + 중 더 큰 값 (max로 비교) +''' + +dynamic[0] = score[0] +dynamic[1] = score[0] + score[1] +dynamic[2] = max (score[1]+score[2], score[0]+score[2]) + +for i in range(3,n): + dynamic[i] = max(dynamic[i-3]+score[i-1]+score[i], dynamic[i-2]+score[i]) +print(dynamic[n-1]) + + +########################################################################################### +#미리 리스트의 공간을 모두 할당 받는(?)건 낭비인가? 싶어서 다시 작성해봤지만 런타임에러 뜸 + +import sys +input = sys.stdin.readline #이렇게 해도 런타임에러 발생 + +n = int(input()) #계단 개수 +score = [] #계단 점수 리스트 -> 계단 개수만큼만 할당 +for x in range(n) : + score.append(int(input())) +dynamic = [] #동적 계획법 빈 리스트 + +if n == 1: + dynamic.append(score[0]) + print(dynamic[0]) +elif n == 2 : + dynamic.append(max(score[0]+score[1], score[1])) + print(sum(score)) +else : # n >= 3 + ''' + dynamic[0] = score[0] + dynamic[1] = score[0] + soore[1] + for i in range(2,n): + dynamic[i] = max(dynamic[i-3]+score[i-1]+score[i], dynamic[i-2]+score[i]) + print(score[-1]) + + ''' + dynamic.append(max(dynamic[i-2]+score[i] , dynamic[i-3]+score[i]+score[i - 1])) + +print(dynamic[-1]) #마지막으로 저장한 값 출력 -> d[n-1] == d[-1] == d.pop() + + diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/2606_\353\260\224\354\235\264\353\237\254\354\212\244_BFS.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/2606_\353\260\224\354\235\264\353\237\254\354\212\244_BFS.py" new file mode 100644 index 0000000..eec5668 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/2606_\353\260\224\354\235\264\353\237\254\354\212\244_BFS.py" @@ -0,0 +1,74 @@ +#2023-05-11-Week5-과제 +#2606_바이러스 + +''' +입력 + +7 총 컴퓨터 수 +6 컴퓨터 간 연결된 선 개수 +1 2 1번컴퓨터와 2번컴퓨터 연결 +2 3 +... +4 7 +''' + +#bfs 너비 우선 탐색 +''' +import sys +from collections import deque +vertex = int(sys.stdin.readline()) # 컴퓨터 개수 +edge = int(sys.stdin.readline()) # 연결선 개수 + +graph = [[NULL] for i in range(vertex+1)] #그래프 +visited = [0]*(vertex+1) #1번 인덱스부터 사용 + +for i in range(edge): # 그래프 생성 + a,b = map(int,stdin.split()) + graph[a]+=[b] # a 에 b 연결 + graph[b]+=[a] # b 에 a 연결 + +visited[1] = 1 # 1번 컴퓨터부터 시작이니 방문 표시 +queue = deque([1]) +while queue : + result = queue.popleft() + for i in graph[result]: + if visited[i]==0: + queue.append(i) + visited[i]=1 +print(sum(visited)-1) +''' + +import sys +from collections import deque + +vertex = int(sys.stdin.readline()) # 컴퓨터 개수 +edge = int(sys.stdin.readline()) # 연결선 개수 + +graph = [[] for i in range(vertex + 1)] # 그래프 +visited = [0] * (vertex + 1) # 1번 인덱스부터 사용 + +for i in range(edge): # 그래프 생성 + a, b = map(int, sys.stdin.readline().split()) + graph[a].append(b) # a 에 b 연결 + graph[b].append(a) # b 에 a 연결 + + +def bfs(start): + visited[start] = 1 + queue = deque([start]) + + while queue: + node = queue.popleft() + for i in graph[node]: + if visited[i] == 0: + queue.append(i) + visited[i] = 1 + +bfs(1) # 1번 컴퓨터부터 시작 +print(sum(visited) - 1) + + + + + + diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/2606_\353\260\224\354\235\264\353\237\254\354\212\244_DFS.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/2606_\353\260\224\354\235\264\353\237\254\354\212\244_DFS.py" new file mode 100644 index 0000000..cce231e --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/2606_\353\260\224\354\235\264\353\237\254\354\212\244_DFS.py" @@ -0,0 +1,38 @@ +#2023-05-11-Week5-과제 +#2606_바이러스 + +''' +입력 + +7 총 컴퓨터 수 +6 컴퓨터 간 연결된 선 개수 +1 2 1번컴퓨터와 2번컴퓨터 연결 +2 3 +... +4 7 +''' + +#dfs +import sys + +vertex = int(sys.stdin.readline()) # 컴퓨터 개수 +edge = int(sys.stdin.readline()) # 연결선 개수 + +graph = [[] for _ in range(vertex + 1)] # 그래프 +visited = [0] * (vertex + 1) # 1번 인덱스부터 사용 + +for i in range(edge): # 그래프 생성 + a, b = map(int, sys.stdin.readline().split()) + graph[a].append(b) # a 에 b 연결 + graph[b].append(a) # b 에 a 연결 + + +def dfs(node): + visited[node] = 1 + for i in graph[node]: + if visited[i] == 0: + dfs(i) + + +dfs(1) # 1번 컴퓨터부터 시작 +print(sum(visited) - 1) diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/5567_\352\262\260\355\230\274\354\213\235.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/5567_\352\262\260\355\230\274\354\213\235.py" new file mode 100644 index 0000000..da3d05d --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/5567_\352\262\260\355\230\274\354\213\235.py" @@ -0,0 +1,56 @@ +#2023-05-11-Week5-수업 +#5567_결혼식 + +''' +입력 값 +6 +5 +1 2 +1 3 +3 4 +2 3 +4 5 +''' + +#bfs + +import sys +from collections import deque + +''' +이렇게 작성했더니 런타임에러 +input = sys.stdin.readline() +N = int(input()) +M = int(input()) +''' + +N = int(sys.stdin.readline()) +M = int(sys.stdin.readline()) + +graph = [[False] * (N + 1) for i in range(N + 1)] #False 대신 0 가능 #1번 인덱스부터 사용 + +for i in range(M): + a, b = map(int, sys.stdin.readline().split()) + graph[a].append(b) # a 인덱스에 b 넣기 + graph[b].append(a) # b 인덱스에 a 넣기 + + #1번 인덱스 -> 본인 -> 본인의 친구 + +visited = [0] * (N + 1) # false 대신 0 이어야 함 -> 덧셈 연산 수행을 위해 int형 + +def bfs(vertex): + queue = deque([vertex]) + visited[vertex] = 1 + while queue: #queue==1일 때 반복 + vertex = queue.popleft() #deque의 popleft()은 list의 pop(0)와 같지만 O(1)임 + for i in graph[vertex]: + if visited[i] == 0: + queue.append(i) + visited[i] = visited[vertex] + 1 +bfs(1) +result = 0 #초대하는 동기의 수 +for i in range(2,N+1): + if (visited[i] != 0) and (visited[i] < 4) : # 본인/친구/친구의 친구 -> visited 수 범위 1~3 + #if 0 < visited[i] <=3 : 이게 더 간결함 + result += 1 #visited 범위에 해당하면 누적합 계산 +print(result) diff --git "a/\354\235\264\355\213\260\354\244\200\355\235\254/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244 Level 2 \354\240\204\355\231\224\353\262\210\355\230\270 \353\252\251\353\241\235.py" "b/\354\235\264\355\213\260\354\244\200\355\235\254/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244 Level 2 \354\240\204\355\231\224\353\262\210\355\230\270 \353\252\251\353\241\235.py" new file mode 100644 index 0000000..e2093b7 --- /dev/null +++ "b/\354\235\264\355\213\260\354\244\200\355\235\254/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244 Level 2 \354\240\204\355\231\224\353\262\210\355\230\270 \353\252\251\353\241\235.py" @@ -0,0 +1,59 @@ +#2023-04-13-Week2 +#프로그래머스 Level 2 전화번호 목록.py + +#hash <- dict : key, value + +''' +문제 설명 +전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. +전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. + +구조대 : 119 +박준영 : 97 674 223 +지영석 : 11 9552 4421 +전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. + +제한 사항 +phone_book의 길이는 1 이상 1,000,000 이하입니다. +각 전화번호의 길이는 1 이상 20 이하입니다. +같은 전화번호가 중복해서 들어있지 않습니다. +''' + +#key value 동일하게 초기화 + +''' +문자열에 원하는 문자가 있는지 확인하는 방법 in 문자열 + +text = "hello joonhee" + +if "joon" in text : + print("T") +else : + print("F") +''' + + +def solution(phone_book): + answer = True + hash = {} + + for i in phone_book : + hash[i] = 0 + + print(hash) + print("--------") + + for i in phone_book : + print(i) + print("--------") + + temp ='' + for j in i : + temp+=j + if temp in hash and temp != i : + answer = False + return answer + +#print(solution(["12","3456","789"])) +solution(["12","3456","789"]) + diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/10026_\354\240\201\353\241\235\354\203\211\354\225\275.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/10026_\354\240\201\353\241\235\354\203\211\354\225\275.py" new file mode 100644 index 0000000..30d320b --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/10026_\354\240\201\353\241\235\354\203\211\354\225\275.py" @@ -0,0 +1,62 @@ +#10026_적록색약 +#적록색약이 아닌 사람 : 유기농 배추랑 똑같음 +#적록색약인 사람 : +import sys +sys.setrecursionlimit(10000) + +read=sys.stdin.readline +#MAX= 100+10 +#print(MAX) +n = int(read()) + +#인덱스0부터 3까지 차례대로 합치면 오른쪽, 왼쪽, 위, 아래 +dirX = [1, -1, 0, 0] +dirY = [0, 0, 1, -1] + +#graph +graph = [list(input().rstrip()) for _ in range(n)] + +#visited +visited=[[False]*(n) for _ in range(n)] + +count1 = 0 +count2 = 0 + + +def dfs(x,y): + global graph, visited + visited[x][y] = True + + for i in range(4): + newX = x + dirX[i] + newY = y + dirY[i] + if (n > newX >= 0) and (n > newY >= 0): + if not visited[newX][newY]: + if graph[newX][newY] == graph[x][y]:#위 조건 만족하면서 탐색중인 색상과 같은 색이면 + dfs(newX, newY) #dfs로 탐색 + +# 적녹색약이 아닌 사람 +for i in range(0, n): + for j in range(0, n): + if graph[i][j] and not visited[i][j]: + dfs(i, j) + count1 += 1 + +# 적녹색약인 사람 +# 초록색->빨간색으로 변경 +for i in range(0, n): + for j in range(0, n): + if graph[i][j] == 'R': + graph[i][j] = 'G' +# 방문정보 초기화 +visited = [[False]*(n) for _ in range(n)] +for i in range(0, n): + for j in range(0, n): + if graph[i][j] and not visited[i][j]: + dfs(i, j) + count2 += 1 + +print(count1, count2) + + + diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/11050_\354\235\264\355\225\255 \352\263\204\354\210\230 1.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/11050_\354\235\264\355\225\255 \352\263\204\354\210\230 1.py" new file mode 100644 index 0000000..87f8b56 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/11050_\354\235\264\355\225\255 \352\263\204\354\210\230 1.py" @@ -0,0 +1,17 @@ +import sys +input = sys.stdin.readline + +n,k = map(int, input().split()) + +array = [[0 for _ in range(n+1)] for _ in range(n+1)] + +for i in range(n+1): + array[i][i] = 1 + array[i][0] = 1 + +for i in range(2,n+1): + for j in range(1,n+1): + if array[i][j] != 1: + array[i][j] = array[i-1][j-1] + array[i-1][j] + +print(array[n][k]) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/11279_\354\265\234\353\214\200 \355\236\231.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/11279_\354\265\234\353\214\200 \355\236\231.py" new file mode 100644 index 0000000..6bc8506 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/11279_\354\265\234\353\214\200 \355\236\231.py" @@ -0,0 +1,17 @@ +# for문 안의 num = int(input()) # 이 방법 시간초과=> 반복문으로 여러 줄 받을 때 input()은 시간초과 발생 + +import heapq, sys + +heap = [] +n = int(input()) + +for i in range(n): + num = int(sys.stdin.readline()) # 한 줄 입력 받아 정수형으로 형변환 + if num == 0: # 0 입력되면 + if heap: # 힙에 요소 있을 때 가장 큰 값 첫번째 루트 노드 삭제 + print(heapq.heappop(heap)[1]) + else:# 비어있을 때 0 출력 + print(0) + else: # 자연수 입력되면 + heapq.heappush(heap, (-num, num)) # (우선순위, 값) + diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/11650_\354\242\214\355\221\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/11650_\354\242\214\355\221\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" new file mode 100644 index 0000000..92f9228 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/11650_\354\242\214\355\221\234 \354\240\225\353\240\254\355\225\230\352\270\260.py" @@ -0,0 +1,42 @@ +import sys +input = sys.stdin.readline + +n = int(input()) # 입력할 좌표 수 : 2차원 배열의 크기 + +def merge_sort(arr): + if len(arr) < 2: + return arr + mid = len(arr) // 2 + left = merge_sort(arr[:mid]) + right = merge_sort(arr[mid:]) + merged_arr = [] + l = r = 0 + + while l < len(left) and r < len(right): + # x 좌표가 같을 경우 : y좌표를 비교해서 작은 값 리스트에 넣기 + #[][0] : x좌표, [][1] : y좌표인 2차원 배열 + if left[l][0] == right[r][0]: + if left[l][1] < right[r][1]: + merged_arr.append(left[l]) + l += 1 + else: + merged_arr.append(right[r]) + r += 1 + elif left[l][0] < right[r][0]: + merged_arr.append(left[l]) + l += 1 + else: + merged_arr.append(right[r]) + r += 1 + + merged_arr += left[l:] + merged_arr += right[r:] + + return merged_arr + +# 입력받은 문자열 n개의 행을 int형 2차원 리스트로 변환-> a에 할당 +a = [list(map(int,input().split())) for i in range(n)] +a = merge_sort(a) + +for i in a: + print(i[0],i[1]) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/11729_\355\225\230\353\205\270\354\235\264 \355\203\221.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/11729_\355\225\230\353\205\270\354\235\264 \355\203\221.py" new file mode 100644 index 0000000..b39847c --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/11729_\355\225\230\353\205\270\354\235\264 \355\203\221.py" @@ -0,0 +1,22 @@ +#11729_하노이 탑 + +n = int(input()) + +#n: 원판 수 +#a,b,c : 3개의 장대 +def top(n, a, b, c):# n개의 원판을 a에서 c로 옮기는 하노이 탑 + + # 원판 1개 : a->c로 옮기면 끝 + if n == 1: + print(a, c) + + # 재귀 + else: + top(n-1, a, c, b) # a에 있는 원판 n-1 개를 b로 옮김 + print(a, c) # a에 남아 있던 가장 큰 n번 원반을 c로 옮김 + top(n-1, b, a, c) # b의 n-1 개의 원반을 c로 옮김 + +sum = 2 ** n - 1 # 이동 횟수 = 2^n-1 +print(sum) + +top(n, 1, 2, 3) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/1431_\354\213\234\353\246\254\354\226\274 \353\262\210\355\230\270.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/1431_\354\213\234\353\246\254\354\226\274 \353\262\210\355\230\270.py" new file mode 100644 index 0000000..7f639ff --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/1431_\354\213\234\353\246\254\354\226\274 \353\262\210\355\230\270.py" @@ -0,0 +1,29 @@ +#1431_시리얼 번호 +# sort 함수 이용 +# 시리얼번호 : 알파벳 대문자(A-Z) ,숫자(0-9) 로 이루어짐 +# 1. 길이 짧은 것이 앞으로 +# 2. 길이 같을 때, a의 모든 자리수의 합(숫자만)과 b의 모든 자리수의 합(숫자만) 중에 작은 합이 앞으로 +# 3. 1,2번 조건으로도 비교 안되면, 사전 순으로 -> 숫자가 알파벳 보다 앞 +# lamda식을 이용한 정렬 arr.sort(key = lambda x : (정렬기준1, 정렬기준2, 정렬기준3, …)) + +import sys +n = int(input()) + +def sum_num(num): + result = 0 # result : 모든 자리수의 합 + for i in num: + if i.isdigit(): # isdisit() : 문자열이 숫자인지 true/false + result += int(i) + return result + +arr = [] +for i in range(n): + arr.append(sys.stdin.readline().strip()) + +# 1. len(x) = 길이 +# 2. sum_num(x) = 모든 자리수의 합 +# 3. x = 사전순 +arr.sort(key = lambda x:(len(x), sum_num(x), x)) + +for i in arr: + print(i) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/15649_N\352\263\274 M(1).py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/15649_N\352\263\274 M(1).py" new file mode 100644 index 0000000..b2d3e62 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/15649_N\352\263\274 M(1).py" @@ -0,0 +1,24 @@ +#itertools의 permutations 함수를 사용해서 풀어보자. +#permutations(iterable, r) : iterable에서 원소 개수가 r개인 +#순열을 뽑는 것 + +import itertools +#from itertools import permutations + +n, m = map(int, input().split()) # 1부터 n까지 수 안에서 요소가 m개인 순열 만들기 +#nums [ i for i in range(1, n+1)] + +arr = [] +for i in range(n+1): + arr.append(i); +#[1,2,3,4] + + +pe = itertools.permutations(arr,m) #12게 +#[(1,2), (1,3), (1, 4)] + +for i in pe: #12개만큼 반복 + for j in i: + print(j, end=' ') # 1 2 + print() + diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/15650_N\352\263\274 M(2).py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/15650_N\352\263\274 M(2).py" new file mode 100644 index 0000000..ef55bd5 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/15650_N\352\263\274 M(2).py" @@ -0,0 +1,10 @@ +import itertools +n, m = map(int, input().split()) + +nums = [ i for i in range(1, n+1)] #1~n까지 nums에 넣기 + +arr = itertools.combinations(nums, m) #중복 제외, 순서 상관없는 조합 만들기 +for i in arr: + for j in i: + print(j, end=' ') + print() \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/15723_n\353\213\250 \353\205\274\353\262\225.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/15723_n\353\213\250 \353\205\274\353\262\225.py" new file mode 100644 index 0000000..616e873 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/15723_n\353\213\250 \353\205\274\353\262\225.py" @@ -0,0 +1,29 @@ +import sys + +input = sys.stdin.readline +INF = int(1e9) # 무한을 의미하는 값으로 10억 + +N = int(input()) + +alphabet = "abcdefghijklmnopqrstuvwxyz" + +n = len(alphabet) #26 + +graph = [[INF] * n for _ in range(n)] # INF로 초기화 + +for _ in range(N): + a, b = map(alphabet.index, input().rstrip().split(" is ")) + graph[a][b] = 1 + +for k in range(n): + for a in range(n): + for b in range(n): + graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b]) + +M = int(input()) +for _ in range(M): + a, b = map(alphabet.index, input().rstrip().split(" is ")) + if graph[a][b] == INF: + print("F") + else: + print("T") diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/1654_\353\236\234\354\204\240 \354\236\220\353\245\264\352\270\260.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/1654_\353\236\234\354\204\240 \354\236\220\353\245\264\352\270\260.py" new file mode 100644 index 0000000..a1e941b --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/1654_\353\236\234\354\204\240 \354\236\220\353\245\264\352\270\260.py" @@ -0,0 +1,24 @@ +import sys + +input = sys.stdin.readline + +# k : 이미 가지고 있는 랜선의 개수, n : 필요한 랜선의 개수 +k, n = map(int, input().split()) +lan = [int(input()) for _ in range(k)] + +answer = 0 # 랜선의 최대 길이 + +start, end = 1, max(lan) +while start <= end: + mid = (start + end) // 2 + temp_sum = 0 + for i in lan: # mid 길이만큼 랜선 케이블들을 조각냄 + temp_sum += i // mid + + if temp_sum >= n: # 랜선의 개수가 n이상이면 + start = mid + 1 + answer = mid + else: # 랜선의 개수가 n미만이면 + end = mid - 1 + +print(answer) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/1931_\355\232\214\354\235\230\354\213\244 \353\260\260\354\240\225.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/1931_\355\232\214\354\235\230\354\213\244 \353\260\260\354\240\225.py" new file mode 100644 index 0000000..e137614 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/1931_\355\232\214\354\235\230\354\213\244 \353\260\260\354\240\225.py" @@ -0,0 +1,32 @@ +# 1931_회의실 배정 + +import sys + +# 회의의 수 +n = int(sys.stdin.readline()) + +# 회의 시간 +meeting_times = [] + +# 회의의 시작 시간과 끝나는 시간 +for _ in range(n): + start, end = map(int, sys.stdin.readline().split()) + meeting_times.append((start, end)) + +# 회의 시간을 종료 시간 기준 및 시작 시간 기준으로 정렬 +meeting_times = sorted(meeting_times, key = lambda x : (x[1], x[0])) + +# 최대 회의 개수 +count = 1 +# 이전 회의 종료 시간 +end_time = meeting_times[0][1] + +for i in range(1, n): + # 다음 회의 시작 시간이 이전 회의 종료 시간보다 크거나 같다면 + if (meeting_times[i][0] >= end_time): + # 이전 회의 종료 시간 업데이트 + end_time = meeting_times[i][1] + # 최대 회의 개수 증가 + count += 1 + +print(count) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" new file mode 100644 index 0000000..9002ee5 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/1966_\355\224\204\353\246\260\355\204\260 \355\201\220.py" @@ -0,0 +1,19 @@ +num = int(input()) + +for i in range(num): + N, M = map(int, input().split()) + queue = list(map(int, input().strip().split())) + queue = [(v, idx) for idx, v in enumerate(queue)] + + order = 0 + + while True: + if max(queue)[0] == queue[0][0]: + order += 1 + if queue[0][1] == M: + print(order) + break + else: + queue.pop(0) + else: + queue.append(queue.pop(0)) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" new file mode 100644 index 0000000..b0cc742 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/1978_\354\206\214\354\210\230 \354\260\276\352\270\260.py" @@ -0,0 +1,19 @@ +### 소수의 개수 찾기 +n = int(input()) # 입력받을 숫자 갯수 + +nums = list(map(int, input().split())) # 공백으로 숫자 구분 +# 입력받은 n개의 숫자 ex: [1, 3, 5, 7] + +prime_cnt=0 #소수 갯수 + +for i in nums: + isPrime = True #소수 여부 + if i == 1: + continue + for j in range(2, i): # nums에 있는 숫자 i를 2부터 i-1까지 나눔 + if i % j == 0: # 나누어떨어지면 + isPrime = False # 소수 아님 + if isPrime == True: # 소수이면 + prime_cnt += 1 # 소수 갯수+1 +print(prime_cnt) + diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/2579_\352\263\204\353\213\250 \354\230\244\353\245\264\352\270\260.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/2579_\352\263\204\353\213\250 \354\230\244\353\245\264\352\270\260.py" new file mode 100644 index 0000000..9761f30 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/2579_\352\263\204\353\213\250 \354\230\244\353\245\264\352\270\260.py" @@ -0,0 +1,18 @@ +import sys +input = sys.stdin.readline + +n = int(input()) # 계단 개수 +s = [int(input()) for _ in range(n)] # 계단 리스트 +dp = [0]*(n) # dp 리스트 + +if len(s)<=2: # 계단 2개 이하 + print(sum(s)) + +else: # 계단이 3개 이상일 때 + dp[0] = s[0] # 첫번째 계단 + dp[1] = s[0] + s[1] # 두번째 계단 + + for i in range(2,n): # 세번째 계단부터 dp점화식 + dp[i] = max(dp[i-3]+s[i-1]+s[i], dp[i-2]+s[i]) + + print(dp[-1]) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/2606_\353\260\224\354\235\264\353\237\254\354\212\244BFS.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/2606_\353\260\224\354\235\264\353\237\254\354\212\244BFS.py" new file mode 100644 index 0000000..8a7e510 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/2606_\353\260\224\354\235\264\353\237\254\354\212\244BFS.py" @@ -0,0 +1,27 @@ +import sys +from collections import deque + +N = int(sys.stdin.readline()) +C = int(sys.stdin.readline()) + +graph = [[] for i in range(N+1)] + +for i in range(C): + a, b = map(int,sys.stdin.readline().split()) + graph[a].append(b) + graph[b].append(a) + +visited = [] +def bfs(x): + q = deque([x]) + visited.append(x) + + while q: + v = q.popleft() + for i in graph[v]: + if i not in visited: + q.append(i) + visited.append(i) + +bfs(1) +print(len(visited) -1) # 1번 컴퓨터는 제외 diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/2606_\353\260\224\354\235\264\353\237\254\354\212\244DFS.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/2606_\353\260\224\354\235\264\353\237\254\354\212\244DFS.py" new file mode 100644 index 0000000..0702772 --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/2606_\353\260\224\354\235\264\353\237\254\354\212\244DFS.py" @@ -0,0 +1,27 @@ +import sys + +n = int(sys.stdin.readline()) # 컴퓨터의 개수 +m = int(sys.stdin.readline()) # 쌍의 개수 + +graph = [[] for _ in range(n + 1)] + +for i in range(m): + a, b = map(int, input().split()) + graph[a].append(b) + graph[b].append(a) + +result = 0 +visited = [0] * (n + 1) + + +def dfs(start): + global result + visited[start] = 1 + for j in graph[start]: + if visited[j] == 0: + result += 1 + dfs(j) + + +dfs(1) +print(result) \ No newline at end of file diff --git "a/\354\235\264\355\213\260\354\247\200\354\234\244/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244_\354\240\204\355\231\224\353\262\210\355\230\270 \353\252\251\353\241\235.py" "b/\354\235\264\355\213\260\354\247\200\354\234\244/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244_\354\240\204\355\231\224\353\262\210\355\230\270 \353\252\251\353\241\235.py" new file mode 100644 index 0000000..29f260a --- /dev/null +++ "b/\354\235\264\355\213\260\354\247\200\354\234\244/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244_\354\240\204\355\231\224\353\262\210\355\230\270 \353\252\251\353\241\235.py" @@ -0,0 +1,17 @@ +def solution(phone_book): + answer = True + hash = {} + + for i in phone_book: + hash[i] = 0 + + for i in phone_book: + print(i) + temp = '' + for j in i: + temp += j + if temp in hash and temp != i: + answer = False + return answer + +print(solution(["34", "3456", "789"])) \ No newline at end of file