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
49 changes: 49 additions & 0 deletions momnpa333/week10/[BOJ]1043-거짓말.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import sys
input=sys.stdin.readline

N,M=map(int,input().split())
lier=set(list(map(int,input().split()))[1:])

parents=[i for i in range(N+1)]

groups=[]

def findparents(i):
if i!=parents[i]:
parents[i]=findparents(parents[i])
return parents[i]
return i

def union(a,b):
a=findparents(a)
b=findparents(b)
if a in lier or b in lier:
lier.add(a)
lier.add(b)

if a<b:
parents[b]=a
else:
parents[a]=b

def islier(member):
if findparents(member) in lier:
return True
return False

for _ in range(M):
group_member=list(map(int,input().split()))[1:]
groups.append(group_member)
for member in group_member:
union(member,group_member[0])
answer=0
for group in groups:
for member in group:
if islier(member):
break
else:
answer+=1
print(answer)



17 changes: 17 additions & 0 deletions momnpa333/week10/[BOJ]1149-RGB거리.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
N=int(input())
cost=[]
for _ in range(N):
cost.append(list(map(int,input().split())))

dp=[[0]*N for _ in range(3)]

dp[0][0]=cost[0][0]
dp[1][0]=cost[0][1]
dp[2][0]=cost[0][2]

for i in range(1,N):
dp[0][i]=min(dp[1][i-1]+cost[i][0],dp[2][i-1]+cost[i][0])
dp[1][i]=min(dp[0][i-1]+cost[i][1],dp[2][i-1]+cost[i][1])
dp[2][i]=min(dp[0][i-1]+cost[i][2],dp[1][i-1]+cost[i][2])
else:
print(min(dp[0][N-1],dp[1][N-1],dp[2][N-1]))
66 changes: 66 additions & 0 deletions momnpa333/week7/[BOJ[17281-야구.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import sys
from itertools import permutations
from collections import deque
input=sys.stdin.readline

N=int(input())

hit_info=[list(map(int,input().split())) for _ in range(N)]

# def play_game(sequence,N):
# score=0
# sequence=sequence[0:3]+[0]+sequence[3:]
# cur_attacker=0
# for base in range(N):
# base_status=[]
# out_count=0
# while out_count<3:
# if hit_info[base][sequence[cur_attacker]]==0:
# out_count+=1
# cur_attacker=(cur_attacker+1)%9
# continue
# runner = [0]*hit_info[base][sequence[cur_attacker]]
# runner[-1]=1
# base_status=runner+base_status
# cur_attacker=(cur_attacker+1)%9
# score+=sum(base_status[3:])
# base_status=base_status[:3]
# return score

def play_game2(sequence,N):
score=0
sequence=sequence[0:3]+[0]+sequence[3:]
cur_attacker=0
for base in range(N):
out_count=0
base_1=0; base_2=0; base_3=0
while out_count<3:
if hit_info[base][sequence[cur_attacker]]==0:
out_count+=1
elif hit_info[base][sequence[cur_attacker]]==1:
score+=base_3
base_1, base_2, base_3 = 1,base_1,base_2
elif hit_info[base][sequence[cur_attacker]]==2:
score+=(base_2+base_3)
base_1,base_2,base_3=0,1,base_1
elif hit_info[base][sequence[cur_attacker]]==3:
score+=(base_1+base_2+base_3)
base_1,base_2,base_3=0,0,1
elif hit_info[base][sequence[cur_attacker]]==4:
score+=(1+base_1+base_2+base_3)
base_1=0; base_2=0; base_3=0

cur_attacker=(cur_attacker+1)%9
return score


answer=0

# print(play_game2([4,5,6,1,2,3,4,5],N))

for sequence in permutations(range(1,9)):
score = play_game2(list(sequence),N)
if answer<score:
answer=score

print(answer)
48 changes: 48 additions & 0 deletions momnpa333/week7/[BOJ]15684-사다리 조작.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import sys
from itertools import combinations
import copy

input=sys.stdin.readline
N,M,H=map(int,input().split())

board=[[False for _ in range (N+1)] for _ in range (H+1)]

for _ in range(M):
r,c=map(int,input().split())
board[r][c]=True

def ispossible(N,H,board,addOn):
check=[]
for item in addOn:
if board[item[0]][item[1]]==True:
check.append(item)
board[item[0]][item[1]]=True


for col in range(1,N+1):
cur_position=col
for row in range(1,H+1):
if board[row][cur_position]==True:
cur_position+=1
elif board[row][cur_position-1]==True:
cur_position-=1
if cur_position!=col:
for item in addOn:
if item not in check:
board[item[0]][item[1]]=False
return False
for item in addOn:
if item not in check:
board[item[0]][item[1]]=False
return True


ary=[(r,c) for r in range(1,H+1) for c in range(1,N)]


for i in range(4):
for item in combinations(ary,i):
if ispossible(N,H,board,item)==True:
print(i)
exit(0)
print(-1)
145 changes: 145 additions & 0 deletions momnpa333/week7/[BOJ]17825-주사위 윷놀이.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
import sys
from collections import deque
import copy
input=sys.stdin.readline

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

#10->25 :A
#20->25: B
#30->25: C
#25->40: D
#그외 :S
Sboard=[[i,True] for i in range(0,40,2)]
Aboard=[[i,True] for i in range(10,22,3)]
Bboard=[[i,True] for i in range(20,26,2)]
Cboard=[[i,True] for i in range(28,25,-1)]
Dboard=[[i,True] for i in range(25,45,5)]

#말->W,X,Y,Z
total_score={
"W":0,
"X":0,
"Y":0,
"Z":0
}

def move_horse(horse,position,dice,total_score,Sboard,Aboard,Bboard,Cboard,Dboard):
if position[0]=="S":
if dice+position[1]>20:
Sboard[dice+position[1]][1]=True
return ("EXIT",total_score)
if dice+position[1]==5 and Aboard[0][1]==True:
total_score[horse]+=Aboard[0][0]
Sboard[position[1]][1]=True
Aboard[0][1]=False
return ("A",0,total_score)
if dice+position[1]==10 and Bboard[0][1]==True:
total_score[horse]+=Aboard[0][0]
Sboard[position[1]][1]=True
Bboard[0][1]=False
return ("B",0,total_score)
if dice+position[1]==15 and Cboard[0][1]==True:
total_score[horse]+=Aboard[0][0]
Sboard[position[1]][1]=True
Cboard[0][1]=False
return ("C",0,total_score)
if dice+position[1]==20 and Dboard[3][1]==True:
total_score[horse]+=Dboard[3][0]
Sboard[position[1]][1]=True
Dboard[3][1]=False
return ("D",3,total_score)
if Sboard[dice+position[1]][1]==True:
total_score[horse]+=Sboard[dice+position[1]][0]
Sboard[position[1]][1]=True
Sboard[dice+position[1]][1]=False
return ("S",dice+position[1],total_score)
return ("S",position[1],total_score)
if position[0]=="A":
next_position=dice+position[1]
if next_position>7:
Aboard[position[1]]=True
return ("EXIT",total_score)
if next_position>3:
next_position-=4
if Dboard[next_position][1]==True:
total_score[horse]+=Dboard[next_position][0]
Dboard[next_position][1]=False
Aboard[position[1]][1]=True
return ("D",next_position,total_score)
if Aboard[next_position][1]==True:
total_score[horse]+=Aboard[next_position][0]
Aboard[next_position][1]=False
Aboard[position[1]]=True
return ("A",next_position,total_score)
if position[0]=="B":
next_position=dice+position[1]
if next_position>6:
Bboard[position[1]]=True
return ("EXIT",total_score)
if next_position>2:
next_position-=3
if Dboard[next_position][1]==True:
total_score[horse]+=Dboard[next_position][0]
Dboard[next_position][1]=False
Bboard[position[1]][1]=True
return ("D",next_position,total_score)
if Bboard[next_position][1]==True:
total_score[horse]+=Bboard[next_position][0]
Bboard[next_position][1]=False
Bboard[position[1]]=True
return ("B",next_position,total_score)
if position[0]=="C":
next_position=dice+position[1]
if next_position>7:
Cboard[position[1]]=True
return ("EXIT",total_score)
if next_position>3:
next_position-=4
if Dboard[next_position][1]==True:
total_score[horse]+=Dboard[next_position][0]
Dboard[next_position][1]=False
Cboard[position[1]][1]=True
return ("D",next_position,total_score)
if Cboard[next_position][1]==True:
total_score[horse]+=Cboard[next_position][0]
Cboard[next_position][1]=False
Cboard[position[1]]=True
return ("C",next_position,total_score)
if position[0]=="D":
next_position=dice+position[1]
if next_position>3:
Dboard[position[1]]=True
return ("EXIT",total_score)
if Dboard[next_position][1]==True:
total_score[horse]+=Dboard[next_position][0]
Dboard[next_position][1]=False
Dboard[position[1]]=True
return ("D",next_position,total_score)
return (position[0],position[1],total_score)


dq=deque([])
dq.appendleft(({"W":("S",0),"X":("S",0),"Y":("S",0),"Z":("S",0)},total_score.copy(),copy.deepcopy(Sboard),copy.deepcopy(Aboard),copy.deepcopy(Bboard),copy.deepcopy(Cboard),copy.deepcopy(Dboard)))
round=0
while dq:
if round==1:
break
for _ in range(len(dq)):
horses,total_score,Sboard,Aboard,Bboard,Cboard,Dboard=dq.popleft()
for horse in horses:
result=move_horse(horse,horses[horse],rolls[round],total_score,Sboard,Aboard,Bboard,Cboard,Dboard)
horse_status=horses.copy()
if result[0]=="EXIT":
del horse_status[horse]
dq.appendleft((horse_status,result[1],copy.deepcopy(Sboard),copy.deepcopy(Aboard),copy.deepcopy(Bboard),copy.deepcopy(Cboard),copy.deepcopy(Dboard)))
continue
horse_status[horse]=(result[0],result[1])
dq.appendleft(((horse_status),result[2],copy.deepcopy(Sboard),copy.deepcopy(Aboard),copy.deepcopy(Bboard),copy.deepcopy(Cboard),copy.deepcopy(Dboard)))
round+=1

for item in dq:
print(item[0],item[1])



38 changes: 38 additions & 0 deletions momnpa333/week8/16928.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#100번 칸을 넘어간다면 이동할 수 없다.
#도착한 칸이 사다리면, 사다리를 타고 위로 올라간다. 뱀이 있는 칸에 도착하면, 뱀을 따라서 내려가게 된다.
#1번 칸과 100번 칸은 뱀과 사다리의 시작 또는 끝이 아니다. 모든 칸은 최대 하나의 사다리 또는 뱀을 가지고 있으며, 동시에 두 가지를 모두 가지고 있는 경우는 없다. 항상 100번 칸에 도착할 수 있는 입력만 주어진다.

import sys
from collections import deque
input=sys.stdin.readline

N,M=map(int,input().split())
bridge=dict()
for _ in range(N+M):
u,v=map(int,input().split())
bridge[u]=v

dq=deque([])
position=1
check={1,}

dq.append(1)

count=0

while dq:
count+=1
for _ in range(len(dq)):
pos=dq.popleft()
for i in range(1,7):
next=pos+i
if next in bridge:
next=bridge[next]
if next==100:
print(count)
exit(0)
if next<=100 and next not in check:
dq.append(next)
check.add(next)


23 changes: 23 additions & 0 deletions momnpa333/week8/2156.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import sys
input=sys.stdin.readline

N=int(input())

wine=[]
for _ in range(N):
wine.append(int(input()))

if N<3:
print(sum(wine))
exit(0)

dp=[0]*N

dp[0]=wine[0]
dp[1]=dp[0]+wine[1]
dp[2]=max(dp[1],dp[0]+wine[2],wine[1]+wine[2])

for i in range(3,N):
dp[i]=max(dp[i-1],dp[i-2]+wine[i],dp[i-3]+wine[i-1]+wine[i])

print(dp[-1])
Loading