Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions Baekjoon/jymin99/두 수의 합/78703097.py
Original file line number Diff line number Diff line change
@@ -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<right:
total=numbers[left]+numbers[right]
if total==x:
cnt+=1
left+=1
right-=1
elif total<x:
left+=1
else:
right-=1
print(cnt)


#일일이 더하는 코드
import sys
input = sys.stdin.readline

n = int(input())
nums = list(map(int, input().split()))
x = int(input())

count = 0
for i in range(n):
for j in range(i+1, n):
if nums[i] + nums[j] == x:
count += 1

print(count)
20 changes: 20 additions & 0 deletions Baekjoon/jymin99/회의실 배정/1931.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import sys
input = sys.stdin.readline
N = int(input())

time = [[0]*2 for _ in range(N)]
for i in range(N):
s, e = map(int, input().split())
time[i][0] = s
time[i][1] = e

time.sort(key = lambda x: (x[1], x[0]))

cnt = 1
end_time = time[0][1]
for i in range(1,N):
if time[i][0] >= end_time:
cnt += 1
end_time = time[i][1]

print(cnt)
Binary file modified Programmers/.DS_Store
Binary file not shown.
Binary file renamed .DS_Store → Programmers/jymin99/.DS_Store
Binary file not shown.
10 changes: 10 additions & 0 deletions Programmers/jymin99/Binary_Search/programmers_12982.py
Original file line number Diff line number Diff line change
@@ -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
8 changes: 8 additions & 0 deletions Programmers/jymin99/Binary_Search/programmers_131705.py
Original file line number Diff line number Diff line change
@@ -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
33 changes: 33 additions & 0 deletions Programmers/jymin99/Binary_Search/programmers_132266.py
Original file line number Diff line number Diff line change
@@ -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]
8 changes: 8 additions & 0 deletions Programmers/jymin99/Binary_Search/programmers_42577.py
Original file line number Diff line number Diff line change
@@ -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
17 changes: 17 additions & 0 deletions Programmers/jymin99/Binary_Search/programmers_43165.py
Original file line number Diff line number Diff line change
@@ -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
31 changes: 31 additions & 0 deletions Programmers/jymin99/Binary_Search/programmers_92344.py
Original file line number Diff line number Diff line change
@@ -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
9 changes: 9 additions & 0 deletions Programmers/jymin99/Dynamic_Programing/programmers_134240.py
Original file line number Diff line number Diff line change
@@ -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
12 changes: 12 additions & 0 deletions Programmers/jymin99/Dynamic_Programing/programmers_142086.py
Original file line number Diff line number Diff line change
@@ -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
35 changes: 35 additions & 0 deletions Programmers/jymin99/Dynamic_Programing/programmers_150365.py
Original file line number Diff line number Diff line change
@@ -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'
33 changes: 33 additions & 0 deletions Programmers/jymin99/Dynamic_Programing/programmers_150367.py
Original file line number Diff line number Diff line change
@@ -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
19 changes: 19 additions & 0 deletions Programmers/jymin99/Dynamic_Programing/programmers_1844.py
Original file line number Diff line number Diff line change
@@ -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<=nx<n and 0<=ny<m and maps[nx][ny]==1:
maps[nx][ny]=maps[x][y]+1
route.append((nx,ny))
#리스트 마지막 원소 출력
return maps[-1][-1] if maps[-1][-1]>1 else -1
19 changes: 19 additions & 0 deletions Programmers/jymin99/Dynamic_Programing/programmers_49994.py
Original file line number Diff line number Diff line change
@@ -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)