diff --git "a/Baekjoon/jymin99/\353\221\220 \354\210\230\354\235\230 \355\225\251/78703097.py" "b/Baekjoon/jymin99/\353\221\220 \354\210\230\354\235\230 \355\225\251/78703097.py" new file mode 100644 index 0000000..cd058f3 --- /dev/null +++ "b/Baekjoon/jymin99/\353\221\220 \354\210\230\354\235\230 \355\225\251/78703097.py" @@ -0,0 +1,38 @@ +import sys +input = sys.stdin.readline + +n = int(input()) +numbers= sorted(list(map(int, input().split()))) +x = int(input()) +cnt = 0 +left=0 +right=n-1 + +while left= end_time: + cnt += 1 + end_time = time[i][1] + +print(cnt) \ No newline at end of file diff --git a/Programmers/.DS_Store b/Programmers/.DS_Store index 0738a45..31309d4 100644 Binary files a/Programmers/.DS_Store and b/Programmers/.DS_Store differ diff --git a/.DS_Store b/Programmers/jymin99/.DS_Store similarity index 91% rename from .DS_Store rename to Programmers/jymin99/.DS_Store index 68ace3b..f1e2586 100644 Binary files a/.DS_Store and b/Programmers/jymin99/.DS_Store differ diff --git a/Programmers/jymin99/Binary_Search/programmers_12982.py b/Programmers/jymin99/Binary_Search/programmers_12982.py new file mode 100644 index 0000000..d179e17 --- /dev/null +++ b/Programmers/jymin99/Binary_Search/programmers_12982.py @@ -0,0 +1,10 @@ +def solution(d, budget): + answer = 0 + d.sort() + for i in d: + if (budget-i>=0): + budget=budget-i + answer+=1 + else: + break + return answer \ No newline at end of file diff --git a/Programmers/jymin99/Binary_Search/programmers_131705.py b/Programmers/jymin99/Binary_Search/programmers_131705.py new file mode 100644 index 0000000..1eb1c6a --- /dev/null +++ b/Programmers/jymin99/Binary_Search/programmers_131705.py @@ -0,0 +1,8 @@ +def solution(number): + answer = 0 + for i in range(len(number)): + for j in range(i+1,len(number)): + for k in range(j+1,len(number)): + if (number[i]+number[j]+number[k]==0): + answer+=1 + return answer \ No newline at end of file diff --git a/Programmers/jymin99/Binary_Search/programmers_132266.py b/Programmers/jymin99/Binary_Search/programmers_132266.py new file mode 100644 index 0000000..e24c09c --- /dev/null +++ b/Programmers/jymin99/Binary_Search/programmers_132266.py @@ -0,0 +1,33 @@ +def solution(n, roads, sources, destination): + # 그래프 생성,인접 노드 정보 담기 + graph = {} + for a, b in roads: #roads 리스트에 있는 각 도로 정보 (a, b)를 반복적으로 처리 + if a in graph: + graph[a].append(b) #만약 a가 이미 graph에 있다면, graph[a]에 연결된 노드 리스트에 b를 추가 + else: #a가 graph에 없다면, 새로운 키 a를 graph에 생성하고, b를 값으로 갖는 리스트를 할당 + graph[a] = [b] + if b in graph:#위 작업 반복 + graph[b].append(a) + else: + graph[b] = [a] + + # BFS 알고리즘[너비 우선 탐색] + # 시작노드에서 목적지까지의 최단거리 반환 + def bfs(start): #시작노드 start:input + distances = [-1] * (n + 1) + distances[start] = 0 #시작 노드의 거리를 0으로 설정 + queue = [start] + + while queue: + node = queue.pop(0) + + for neighbor in graph[node]:#현재 노드 node에 연결된 모든 이웃 노드 neighbor를 순회 + #웃 노드 neighbor의 거리가 아직 설정되지 않았다면, 현재 노드 node의 거리에 1을 더한 값을 neighbor의 거리로 설정합니다. + if distances[neighbor] == -1: + distances[neighbor] = distances[node] + 1 + queue.append(neighbor) + + return distances[destination] if distances[destination] != -1 else -1 + + # 각 부대원의 최단 거리 계산 + return [bfs(source) for source in sources] diff --git a/Programmers/jymin99/Binary_Search/programmers_42577.py b/Programmers/jymin99/Binary_Search/programmers_42577.py new file mode 100644 index 0000000..866897d --- /dev/null +++ b/Programmers/jymin99/Binary_Search/programmers_42577.py @@ -0,0 +1,8 @@ +def solution(phone_book): + phone_book.sort() + + for i in range(len(phone_book) - 1): + if phone_book[i + 1].startswith(phone_book[i]): + return False + + return True diff --git a/Programmers/jymin99/Binary_Search/programmers_43165.py b/Programmers/jymin99/Binary_Search/programmers_43165.py new file mode 100644 index 0000000..f78114d --- /dev/null +++ b/Programmers/jymin99/Binary_Search/programmers_43165.py @@ -0,0 +1,17 @@ +def solution(numbers, target): + answer = 0 + + def dfs(index, total): + nonlocal answer + + if index == len(numbers): + if total == target: + answer += 1 + return + + dfs(index + 1, total + numbers[index]) + dfs(index + 1, total - numbers[index]) + + dfs(0, 0) + + return answer diff --git a/Programmers/jymin99/Binary_Search/programmers_92344.py b/Programmers/jymin99/Binary_Search/programmers_92344.py new file mode 100644 index 0000000..06690ea --- /dev/null +++ b/Programmers/jymin99/Binary_Search/programmers_92344.py @@ -0,0 +1,31 @@ +def solution(board, skill): + n = len(board) + m = len(board[0]) + damage = [[0] * (m + 1) for _ in range(n + 1)] #damage에 배열 크기 설정 + + #skill 배열을 순회하면서 각 공격/방어 정보를 damage 배열에 반영. 공격은 양수 값으로, 방어는 음수 값으로 표현 + for t, r1, c1, r2, c2, degree in skill: + if t == 1: + degree = -degree + damage[r1][c1] += degree + damage[r1][c2 + 1] -= degree + damage[r2 + 1][c1] -= degree + damage[r2 + 1][c2 + 1] += degree + + #각 행의 변화량을 누적합으로 계산 + for i in range(n): + for j in range(m): + damage[i][j + 1] += damage[i][j] + + for j in range(m): + for i in range(n): + damage[i + 1][j] += damage[i][j] + + #각 셀의 최종 값(원래 값 + 변화량)이 양수인 경우 intact_count를 증가 + intact_count = 0 + for i in range(n): + for j in range(m): + if board[i][j] + damage[i][j] > 0: + intact_count += 1 + + return intact_count diff --git a/Programmers/jymin99/Dynamic_Programing/programmers_134240.py b/Programmers/jymin99/Dynamic_Programing/programmers_134240.py new file mode 100644 index 0000000..db4f3c6 --- /dev/null +++ b/Programmers/jymin99/Dynamic_Programing/programmers_134240.py @@ -0,0 +1,9 @@ +def solution(food): + answer = '' + player1='' + for i in range(1,len(food)): + for j in range (food[i]//2): + player1+=str(i) + player2=player1[::-1] + answer=player1+'0'+player2 + return answer \ No newline at end of file diff --git a/Programmers/jymin99/Dynamic_Programing/programmers_142086.py b/Programmers/jymin99/Dynamic_Programing/programmers_142086.py new file mode 100644 index 0000000..895bcd5 --- /dev/null +++ b/Programmers/jymin99/Dynamic_Programing/programmers_142086.py @@ -0,0 +1,12 @@ +def solution(s): + answer = [] + answer.append(-1) + for i in range(1,len(s)): + s_section=s[i-1::-1] + word=s[i] + num=s_section.find(word) + if num==-1: + answer.append(num) + else: + answer.append(num+1) + return answer \ No newline at end of file diff --git a/Programmers/jymin99/Dynamic_Programing/programmers_150365.py b/Programmers/jymin99/Dynamic_Programing/programmers_150365.py new file mode 100644 index 0000000..a13408b --- /dev/null +++ b/Programmers/jymin99/Dynamic_Programing/programmers_150365.py @@ -0,0 +1,35 @@ +import sys +sys.setrecursionlimit(10 ** 6) + +from collections import deque + +def getDistance(x, y, r, c): + return abs(r - x) + abs(c - y) + +def solution(n, m, x, y, r, c, k): + DIRECTIONS = ['d', 'l', 'r', 'u'] + dx, dy = [1, 0, 0, -1], [0, -1, 1, 0] + + stack = deque([]) + stack.append([x, y, 0, '']) + + while stack: + cx, cy, count, move = stack.pop() + + if cx == r and cy == c: + if count == k: + return move + elif (k - count) % 2 == 1: + return 'impossible' + + temp = [] + + for i in range(4): + nx, ny = cx + dx[i], cy + dy[i] + if 0 < nx <= n and 0 < ny <= m and getDistance(nx, ny, r, c) + count + 1 <= k: + temp.append([nx, ny, count + 1, move + DIRECTIONS[i]]) + + temp.reverse() + stack += temp + + return 'impossible' \ No newline at end of file diff --git a/Programmers/jymin99/Dynamic_Programing/programmers_150367.py b/Programmers/jymin99/Dynamic_Programing/programmers_150367.py new file mode 100644 index 0000000..7db9fa1 --- /dev/null +++ b/Programmers/jymin99/Dynamic_Programing/programmers_150367.py @@ -0,0 +1,33 @@ +# 잘 이해가 안감. +def dfs(b, i, depth): + if depth == 0: # 리프 노드에 도달했다면 + return True # 포화이진트리 + + # 부모노드가 '0' 일때 + # 왼쪽 자식 노드가 '1' 이거나 오른쪽 자식 노드가 '1' 이라면 포화 이진트리가 될 수 없음 + elif b[i] == '0': + if b[i - depth] == '1' or b[i + depth] == '1': return False + + # 왼쪽 서브 트리 탐색 + left = dfs(b, i - depth, depth // 2) + # 오른쪽 서브 트리 탐색 + right = dfs(b, i + depth, depth // 2) + return left and right + + +def solution(numbers): + answer = [] + for num in numbers: # num = 42 + b = bin(num)[2:] # b = 101010 / len(b) = 6 + nodes = bin(len(b) + 1)[2:] # nodes = 7 = 111 + + # 포화이진트리가 아닌 경우 더미노드(0추가) + if '1' in nodes[1:]: + dummies = (1 << len(nodes)) - int(nodes, 2) + b = '0' * dummies + b + + # 이미 포화이진트리일 경우 + result = dfs(b, len(b)//2, (len(b)+1)//4) + answer.append(1 if result else 0) + + return answer \ No newline at end of file diff --git a/Programmers/jymin99/Dynamic_Programing/programmers_1844.py b/Programmers/jymin99/Dynamic_Programing/programmers_1844.py new file mode 100644 index 0000000..e28eb1f --- /dev/null +++ b/Programmers/jymin99/Dynamic_Programing/programmers_1844.py @@ -0,0 +1,19 @@ +from collections import deque +def solution(maps): + n,m=len(maps), len(maps[0]) + #상하좌우 + dx, dy=[-1,1,0,0],[0,0,-1,1] + route=deque() + route.append([0,0]) + while route: + x,y=route.popleft() + #상하좌우 길 탐색 + for i in range(4): + nx=x+dx[i] + ny=y+dy[i] + #범위 설정(맵 내부이면서,벽이 없는것 확인) + if 0<=nx1 else -1 \ No newline at end of file diff --git a/Programmers/jymin99/Dynamic_Programing/programmers_49994.py b/Programmers/jymin99/Dynamic_Programing/programmers_49994.py new file mode 100644 index 0000000..657b181 --- /dev/null +++ b/Programmers/jymin99/Dynamic_Programing/programmers_49994.py @@ -0,0 +1,19 @@ +def solution(dirs): + route=set() #set을 사용해 중복된 경로를 제거한다. + x=0 + y=0 + #경로를 추가할 때는 무조건 작은 갚이 앞에 오도록 한다. 그래야 경로 비교해서 set으로 중복 제거 가능 + for d in dirs: + if d=='U'and y<5: + route.add(((x,y),(x,y+1))) + y+=1 + elif d=='D'and y>-5: + route.add(((x,y-1),(x,y))) + y-=1 + elif d=='R'and x<5: + route.add(((x,y),(x+1,y))) + x+=1 + elif d=='L'and x>-5: + route.add(((x-1,y),(x,y))) + x-=1 + return len(route) \ No newline at end of file