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
48 changes: 48 additions & 0 deletions Baekjoon/그래프와 순회/JibinSong/1012.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
def dfs(x, y):
# 현재 위치 방문 처리
visited[x][y] = 1
# 동서남북으로 이동
for i in range(4):
next_x = x + dx[i]
next_y = y + dy[i]
# 경계를 넘어가는지 배추가 있는지 확인
# print("next_x", next_x, "next_y", next_y)
if (0 <= next_x <= n - 1) and (
0 <= next_y <=
m - 1) and arr[next_x][next_y] and not visited[next_x][next_y]:
dfs(next_x, next_y) # 인접한 배추 방문 기록 남기기
return


# 동 서 남 북
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]

t = int(input())
for i in range(t):
# m: 가로, n: 세로, k: 배추 개수
m, n, k = map(int, input().split())
# 배추밭
arr = [[0 for _ in range(m)] for _ in range(n)]
# 방문 기록
visited = [[0 for _ in range(m)] for _ in range(n)]
# 배추밭에 배추 기록
for _ in range(k):
a, b = map(int, input().split())
arr[b][a] = 1
# print(arr)
# print(visited)
cnt = 0 # 지렁이 수
# 0,0 부터 시작해서 인접한 배추로 연결된 배추 그룹이 몇 개인지 확인
for i in range(n):
for j in range(m):
# 배추 있는지, 방문한 적 있는지 확인
if arr[i][j] and (not visited[i][j]):
# 배추 있고, 방문한 적 없으면 지렁이 추가
cnt += 1
# print(f"i{i}, j{j}, cnt{cnt}")
# dfs로 인접한 배추들 방문 처리하기
dfs(i, j)
# print(visited)

print(cnt)
44 changes: 44 additions & 0 deletions Baekjoon/그래프와 순회/JibinSong/2667.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
def dfs(x, y):
# 방문 기록
visited[x][y] = 1
# 동서남북 확인
for i in range(4):
next_x = x + dx[i]
next_y = y + dy[i]
# 경계를 넘지 않는지, 집이 있는지 확인
# print("x, y", next_x, next_y)
if 0 <= next_x <= n - 1 and 0 <= next_y <= n - 1 and arr[next_x][
next_y] and not visited[next_x][next_y]:
num_home[-1] += 1
dfs(next_x, next_y)

return


dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
n = int(input())
# 지도
arr = [list(map(int, list(input()))) for _ in range(n)]
visited = [[0 for _ in range(n)] for _ in range(n)]
# print("visited", visited)
# 단지 수
cnt = 0
# 집 개수 리스트
num_home = []

# 지도 0,0부터 순회하며 연결된 집 개수 세기
for i in range(n):
for j in range(n):
# 집이 있고, 이전에 방문한 적이 없으면,
if (not visited[i][j]) and arr[i][j]:
# 단지 개수 세기
cnt += 1
num_home.append(1)
# print(f"i:{i}, j:{j}, num_home", num_home)
dfs(i, j)

print(cnt)
num_home.sort()
for i in num_home:
print(i)
25 changes: 25 additions & 0 deletions Baekjoon/이분 탐색/JibinSong/12015.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
def get_idx(arr, key): # key보다 크지만 가장 작은 값의 위치
min_v = 0
max_v = len(arr) - 1
while True:
if min_v > max_v:
return min_v
mid = (min_v + max_v) // 2
if arr[mid] < key:
min_v = mid + 1
else:
max_v = mid - 1


n = int(input()) # 10 20 30 15 20 25 50 45 55 60
array = list(map(int, input().split()))
result = [array[0]]

for i in array:
if i > result[-1]:
result.append(i)
else:
idx = get_idx(result, i)
result[idx] = i

print(len(result))
26 changes: 26 additions & 0 deletions Baekjoon/이분 탐색/JibinSong/2805.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
n, m = map(int, input().split())

arr = list(map(int, input().split()))

min_h = max(arr) - m # 절단기 높이의 최솟값
max_h = max(arr) # 절단기 높이의 최댓값

def count_length(mid):
cnt = 0
for i in arr:
if i > mid:
cnt += i - mid
return cnt

while True:
print(f"min: {min_h}, max: {max_h}, mid: {(min_h + max_h) // 2}")
if min_h > max_h:
print(max_h)
break
mid = (min_h + max_h) // 2
cnt = count_length(mid)
print(f"cnt: {cnt}")
if cnt >= m:
min_h = mid + 1
else:
max_h = mid - 1