# 2178번
# 문제
# N*M 크기의 배열
# (1,1) => (N,M) 까지 가야한다.
from collections import deque
dx = [-1,1,0,0]
dy = [0,0,1,-1]
N,M = map(int,input().split())

maze = [list(input()) for _ in range(N)]


visted = [[0]*M for _ in range(N)]


stack = deque()
stack.append((0,0))
visted[0][0] = 1
flag = False
while not flag:
    x,y = stack.popleft()
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if nx == N-1 and ny == M-1:
            flag = True
            visted[nx][ny] = visted[x][y] + 1
            break
        elif 0<=nx<N and 0<=ny<M:
            if not visted[nx][ny] and maze[nx][ny] == '1':
                visted[nx][ny] = visted[x][y] + 1
                stack.append((nx,ny))
print(visted[N-1][M-1])

이 문제는 시작위치와 도착위치가 정해져있고, 최소 이동거리를 찾는것이므로, visited라는 maze와 똑같은 사이즈의 리스트를 만들어두고, 그 안에 이동거리를 저장해주었다. 그리고 도착위치에 도착하면 break를 해주었고, 그때의 flag를 바꿔주어서 상단의 while문도 빠져나갈수 있게 해주었다.

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ] 2751 수 정렬하기 2  (0) 2021.01.09
[BOJ] 2606 바이러스  (0) 2021.01.09
[BOJ] 1764 듣보잡  (0) 2021.01.09
[BOJ] 1697 숨바꼭질  (0) 2021.01.09
[BOJ] 1676 팩토리얼 0의 개수  (0) 2021.01.09
N,M = map(int,input().split())

hear = {}
for _ in range(N):
    hear[input()] = 1

result = []
for _ in range(M):
    see = input()
    if hear.get(see):
        result.append(see)

result.sort()

print(len(result))

print('\n'.join(result))

 

이 부분은 dictionary에서 쉽게 쓸수 있는 get 메소드를 통해 존재하는 경우 result 리스트에 저장해두고 출력해주었다.

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ] 2606 바이러스  (0) 2021.01.09
[BOJ] 2178 미로탐색  (0) 2021.01.09
[BOJ] 1697 숨바꼭질  (0) 2021.01.09
[BOJ] 1676 팩토리얼 0의 개수  (0) 2021.01.09
[BOJ] 1330 두 수 비교하기  (0) 2021.01.09
# 1697 숨바꼭질

#  수빈이는 N 동생은 K 
#  수빈이는 X-1 or X+1 2*X


N,M = map(int,input().split())

result = 0
stack = [(N,0)]
visited = [0]*100001
while stack:
    cu_n,cnt = stack.pop(0)
    if cu_n == M:
        break
    if 0<= cu_n <= 100000:
        if 0<= cu_n -1 <= 100000:
            if not visited[cu_n-1]:
                visited[cu_n-1] =1
                stack.append((cu_n-1,cnt+1))
        if 0<= cu_n+1 <= 100000:
            if not visited[cu_n+1]:
                visited[cu_n+1] =1
                stack.append((cu_n+1,cnt+1))
        if 0<= cu_n*2 <= 100000:
            if not visited[cu_n*2]:
                visited[cu_n*2] =1
                stack.append((cu_n*2,cnt+1))
print(cnt)

BFS의 일종으로 볼 수 있다.

 현재 위치에서 +1, -1 , *2 를 했을 때의 값을 추가해주고, BFS에서는 먼저 들리는 곳이 가장 가까운 곳이므로, 한번 방문했던 곳은 연산량을 줄이기 위해 방문을 표시해주었다. 그리고 최초로 목표 위치인 M을 방문하면 반복문을 멈추게 했다.

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ] 2178 미로탐색  (0) 2021.01.09
[BOJ] 1764 듣보잡  (0) 2021.01.09
[BOJ] 1676 팩토리얼 0의 개수  (0) 2021.01.09
[BOJ] 1330 두 수 비교하기  (0) 2021.01.09
[BOJ] 1001 A-B  (0) 2021.01.09
N = int(input())
result = 1

if N == 0:
    print(0)
else:
    for num in range(1,N+1):
        result*=num
    result = str(result)
    cnt = 0
    for k in result[::-1]:
        if k == '0':
            cnt += 1
        else:
            break
    print(cnt)

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ] 1764 듣보잡  (0) 2021.01.09
[BOJ] 1697 숨바꼭질  (0) 2021.01.09
[BOJ] 1330 두 수 비교하기  (0) 2021.01.09
[BOJ] 1001 A-B  (0) 2021.01.09
[BOJ] 1000 A+ B  (0) 2021.01.09
A,B = map(int,input().split())

if A > B:
    print('>')
elif A < B:
    print('<')
else:
    print('==')

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ] 1764 듣보잡  (0) 2021.01.09
[BOJ] 1697 숨바꼭질  (0) 2021.01.09
[BOJ] 1676 팩토리얼 0의 개수  (0) 2021.01.09
[BOJ] 1001 A-B  (0) 2021.01.09
[BOJ] 1000 A+ B  (0) 2021.01.09
a,b=map(int,input().split( ))

print(a-b)

 

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ] 1764 듣보잡  (0) 2021.01.09
[BOJ] 1697 숨바꼭질  (0) 2021.01.09
[BOJ] 1676 팩토리얼 0의 개수  (0) 2021.01.09
[BOJ] 1330 두 수 비교하기  (0) 2021.01.09
[BOJ] 1000 A+ B  (0) 2021.01.09
a,b=map(int,input().split())
print(a+b)

 

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ] 1764 듣보잡  (0) 2021.01.09
[BOJ] 1697 숨바꼭질  (0) 2021.01.09
[BOJ] 1676 팩토리얼 0의 개수  (0) 2021.01.09
[BOJ] 1330 두 수 비교하기  (0) 2021.01.09
[BOJ] 1001 A-B  (0) 2021.01.09

+ Recent posts