Skip to content
Open
51 changes: 51 additions & 0 deletions 이티예원/10026_적록색약.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
from collections import deque

def BFS(x,y):
q.append((x,y))
dx = [-1,0,1,0]
dy = [0,1,0,-1]
visited[x][y] = 1
while q:
x, y = q.popleft()
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]

# 범위 안에 있고
# 같은 색이고
# 방문 안한 경우
if 0<=nx<N and 0<=ny<N and a[nx][ny] == a[x][y] and not visited[nx][ny]:
# 방문 여부 확인 후, 큐에 넣음
visited[nx][ny] = 1
q.append((nx,ny))


N = int(input())
a = [list(input()) for _ in range(N)]
q = deque()

visited = [[0] * N for _ in range(N)]
cnt1 = 0

# 적록색약 아닌 경우
for i in range(N):
for j in range(N):
if not visited[i][j]:
BFS(i,j)
cnt1 += 1

# 적록색약인 경우
for i in range(N):
for j in range(N):
if a[i][j] == 'G':
a[i][j] = 'R'

visited = [[0] * N for _ in range(N)]
cnt2 = 0
for i in range(N):
for j in range(N):
if not visited[i][j]:
BFS(i,j)
cnt2 += 1

print(cnt1, cnt2)
20 changes: 20 additions & 0 deletions 이티예원/15651_N과 M (3).py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import sys
input = sys.stdin.readline

N, M = map(int, input().split())
arr = [0 for _ in range(M)]
# arr : 입력 받은 M개의 숫자가 차례로 담기는 리스트

# dfs(cnt) : 숫자를 cnt개 선택한 상태에서 arr[cnt]를 고르는 함수
def dfs(cnt):
if cnt == M: # 재귀함수 dfs(cnt) 종료 조건
print(' '.join(map(str, arr)))
return

# cnt != m 인 경우,
# 숫자를 더 선택해야 함
for i in range(1, N + 1): # 1 부터 n까지의 숫자를 이번 칸에 한번씩 넣어 줌
arr[cnt] = i
dfs(cnt+1) # 다음 칸 숫자를 선택하는 다음 깊이 탐색 호츌

dfs(0)
22 changes: 22 additions & 0 deletions 이티예원/15723_n단 논법.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
n = int(input())
dist = [[1e9 for i in range(26)] for i in range(26)]
for i in range(n):
inList = input().split()
start = ord(inList[0]) - ord('a')
end = ord(inList[2]) - ord('a')
dist[start][end] = 1

for k in range(26):
for i in range(26):
for j in range(26):
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])

m = int(input())
for i in range(m):
inList = input().split()
start = ord(inList[0]) - ord('a')
end = ord(inList[2]) - ord('a')
if dist[start][end] < 1e9:
print('T')
else:
print('F')
25 changes: 25 additions & 0 deletions 이티예원/1654_랜선 자르기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import sys
input = sys.stdin.readline

K, N = map(int, input().split())
lan = [int(input()) for _ in range(K)]
end = max(lan)

def lan_length(n):
count = 0
for item in lan:
count += item // n
return count

def program(start, end, N):
if start > end:
return end

mid = (start + end) // 2
length = lan_length(mid)
if length >= N:
return program(mid+1, end, N)
else:
return program(start, mid-1, N)

print(program(1, end, N))
21 changes: 21 additions & 0 deletions 이티예원/1931_회의실 배정.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
N = int(input())
time = []


for i in range(N):
start, end = map(int, input().split())
time.append([start, end])


time = sorted(time, key = lambda a : a[0])
time = sorted(time, key = lambda a : a[1])

finish = 0
cnt = 0

for start, end in time:
if start >= finish:
cnt += 1
finish = end

print(cnt)
17 changes: 17 additions & 0 deletions 이티예원/2579_계단 오르기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import sys
input = sys.stdin.readline

n = int(input())
s = [0 for i in range(301)]
dp = [0 for i in range(301)]

for i in range(n):
s[i] = int(input())

dp[0] = s[0]
dp[1] = s[0] + s[1]
dp[2] = max(s[1] + s[2], s[0] + s[2])
for i in range(3, n):
dp[i] = max(dp[i-3] + s[i-1] + s[i], dp[i-2] + s[i])

print(dp[n-1])
24 changes: 24 additions & 0 deletions 이티예원/2606_바이러스.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from collections import deque

computer = int(input())
v = int(input())
graph = [[] for i in range(computer+1)]
visited = [0]*(computer+1)

for i in range(v):
a, b = map(int, input().split())
graph[a] += [b]
graph[b] += [a]


visited[1] = 1
Q = deque([1])

while Q:
c = Q.popleft()
for nx in graph[c]:
if visited[nx]==0:
Q.append(nx)
visited[nx]=1

print(sum(visited)-1)
21 changes: 21 additions & 0 deletions 이티예원/2606_바이러스_DFS.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#DFS

computer=int(input())
v=int(input())

graph = [[] for i in range(computer+1)]
visited=[0]*(computer+1)

for i in range(v):
a,b=map(int,input().split())
graph[a]+=[b]
graph[b]+=[a]

def dfs(v):
visited[v]=1
for nx in graph[v]:
if visited[nx]==0:
dfs(nx)

dfs(1)
print(sum(visited)-1)
24 changes: 24 additions & 0 deletions 이티예원/2839_설탕 배달.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
N = int(input())
bag = 0

while N >= 0:

# 봉지 수를 최소로 만들기 위해서
# 5kg 봉지 수를 최대로
# 3kg 봉지 수를 최소로 만들어야 함

# 5의 배수인 경우
if N % 5 == 0:
bag += int(N // 5)
print(bag)
break

# 5의 배수가 아닌 경우
# 5의 배수로 만들기 위해서
N -= 3 # 배달 해야 하는 설탕 -3kg
bag += 1 # 가져가야하는 봉지 수 +1
# 1. 5의 배수가 될 때까지
# 2. 또는 정확하게 N킬로그램으로 만들 수 없음이 확인될 때 까지 반복

else:
print(-1)