728x90
5097. 회전
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import sys
sys.stdin = open("5097.txt", "r")
T = int(input())
for tc in range(1,T+1):
N, M = list(map(int,input().split()))
nlst = list(map(int,input().split()))
cnt = 1
while True:
temp = nlst.pop(0)
nlst.append(temp)
cnt += 1
if cnt == M:
break
print("#{} {}".format(tc, nlst[1]))
# ###
# for i in range(M):
# data = lst.pop(0)
# lst.append(data)
#
# print(lst.pop(0))
## 오우오우 만약 N개의 자연수를 M번을 나누면 된다. M%N
|
cs |
5099. 피자 굽기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import sys
sys.stdin = open("5099.txt", "r")
T = int(input())
for tc in range(1,T+1):
#M개의 피자, 뿌려진 치즈 양, 화덕을 한바퀴 돌때 녹지 않은 치즈의 양은 반으로 줄어듬 //2
# 치즈 모두 녹아 0이면 화덕에서 꺼낸다.
# 다시 그자리에 남은 피자 순서대로 넣기
N, M = list(map(int, input().split()))
cheeze = list(map(int,input().split()))
Q = [] # 화덕?
for i in range(N):
Q.append([cheeze[i], i])
#print(cheeze)
#print(Q)
i = 0
while len(Q) != 1:
Q[0][0] = Q[0][0]//2 #치즈 녹이기
if Q[0][0] == 0: #만약에 치즈 다녹이면?
if N+i< M:
Q.pop(0)
Q.append([cheeze[N+i],N+i])
i+=1
elif N+i >= M:
Q.pop(0)
else:
Q.append(Q.pop(0))
print("#{} {}".format(tc, Q[0][1]+1))
# while Q: #화덕 Q
# for i in range(len(Q)):#한바퀴 돌때
# cheeze[i] = cheeze[i]//2
#
# if 치즈가 모두 녹아내렸다면,화덕에 피자가 빠지면
# temp = cheeze.pop(0)
# Q.append(temp)
#
# print(hwa)
#
# 화덕 크기
|
cs |
5102. 노드의 거리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import sys
sys.stdin = open("5102.txt", "r")
def BFS(Q):
d = 1
while Q:
s_Q=[]
while Q: #
idx = Q.pop()
for i in linelst[idx]: #연결 확인
if visited[i]: #만약에 방문했다면 넘어감
continue
if i== end: #도착했다면 cnt로 체크한 거리 반환
return d
s_Q.append(i) #두번째 큐로 가버리기
visited[i] = 1 #그리고 방문처리도!
d += 1 #큐가 비었으면 거리 증가
Q = s_Q
return 0
T = int(input())
for tc in range(1,T+1):
#V : 노드, E : 간선
V, E = map(int, input().split())
#간선 표시
linelst = [[] for _ in range(V+1)]
#방문 표시
visited = [[] for _ in range(V+1) ]
for i in range(E):
a, b = map(int, input().split())
linelst[a].append(b)
linelst[b].append(a)
#시작 노드와 끝나는 노드 저장
start, end = map(int, input().split())
#시작했던 곳 표시
visited[start] = 1
#bfs 돌리기
print("#{} {}".format(tc, BFS([start])))
|
cs |
5105 미로의 거리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
import sys
sys.stdin = open("5105.txt", "r")
#=======================================================================================================================
#안되나봄
# def startpoint():
# for y in range(N):
# for x in range(N):
# if Miro[y][x] == 2:
# sy, sx = y, x
# return sy,sx
#=======================================================================================================================
def possible(y,x): #이동 가능한 곳인지 조건문에 활용하기
return 0 <= y < N and 0<= x < N and (Miro[y][x] == 0 or Miro[y][x] == 3)
#=======================================================================================================================
def BFS(sy, sx):
global D_result #거리
Q.append((sy, sx))
visited.append((sy, sx)) #갔던곳 표시
while Q: # q가 남아있을때까지
sy, sx = Q.pop(0)
for dir in range(4): #4방향 탐색
NewY = sy + dy[dir]
NewX = sx + dx[dir]
if possible(NewY, NewX) and (NewY, NewX) not in visited: #possible 확인 후 방문하지 않았던 곳인지? 조건문 실행
Q.append((NewY, NewX)) # Q에 내가 간 장소 append 해주기
visited.append((NewY, NewX)) #visited에 내가 갈수있는 새로운 xy 좌표를 append 해준다.
Distance[NewY][NewX] = Distance[sy][sx]+ 1 #지나간 거리마다 +1 해주기
if Miro[NewY][NewX] == 3: #도착지인 3에 왔다면?
D_result = Distance[NewY][NewX] -1 #거리 값은 계산했던 거리값 -1 해서 결과 값 저장
return
#=======================================================================================================================
T = int(input())
for tc in range(1, T+1):
N = int(input())
Miro = [list(map(int, input())) for _ in range(N)]
visited = [[0]*N for _ in range(N)]
for y in range(N):
for x in range(N):
if Miro[y][x] == 2:
sy, sx = y, x
dy = [1, -1, 0, 0]
dx = [0, 0, -1, 1]
D_result = 0
Q = []
Distance = [[0]*N for _ in range(N)]
BFS(sy, sx)
# for i in range(N):
# print()
# for j in range(N):
# print(Distance[i][j],end="")
# print()
# print()
print("#{} {}".format(tc, D_result))
###########선생님"
# def dfs():
# while ST:
# #튜플인 경우에는 () 괄호 안쓰고 row col 적어도됨
# row,col = ST.pop(-1)
# #4방면
# for di in range(4):
# #경계 체크
# newR =
# newC =
# if 경계 체크 and arr[newR][newC] != '1' and not visited[newR][newC]:
# ST.append((newR, newC))# 왜 () 추가시켜주지?
# visited[][] =
# #여기 까지 몇번왔는디 체크하는 방법
# def Bfs(row,col):
# Q.append((row,col,0))
#
# while Q:
# row,col,cnt = Q.pop(0)
# #원래 0 부터 들어와서 체크해주기위해 1부터시작
# visited[row][col]
# for di in range(4):
# newR =
# newC =
#
# if 경계 체크 and arr[newR][newC] != '1' and not visited[newR][newC] == 0:
# if arr[newR][newC] =='3':
# return cnt
#
# ST.append((newR,newC)) # vistied를 쓰면 cnt 를 사용할 필요가없다.
# visited[newR][newC] = visited[row][col] + 1
|
cs |
728x90
'알고리즘 > SWAE' 카테고리의 다른 글
[SWAE] 1231.중위순회 (0) | 2021.04.05 |
---|---|
[백준] (단계별 - for 문) 2438, 2741, 2742, 10871, 11021, 11022, 15552 번문제.. (0) | 2021.03.06 |
[Python] [D3] 1225. 암호생성기 ( 큐 ) (0) | 2021.03.04 |
[Python] (D2) 4871.그래프 경로 // DFS 응용 문제 (0) | 2021.03.02 |
[Python] - D2 - 2005. 파스칼의 삼각형 (0) | 2021.02.23 |