Baekjoon

Baekjoon/DFS와 BFS

[백준] 16953 A → B (실버2)

문제요약 나의 코드 및 설명 - DFS 활용 DFS를 활용하여 문제를 해결하였다. def dfs(depth, temp): global a,b if temp >= b: if temp == b: result.append(depth) return dfs(depth+1, temp*2) dfs(depth+1, int("".join(map(str, (list(map(int, str(temp)))+[1]))))) a, b = map(int, input().split()) result = [] dfs(0,a) if result: print(min(result)+1) else: print(-1) 다른 코드 및 설명 - BFS 활용 BFS를 활용하여 문제를 해결하였다. 큐에 다음 숫자와 연산의 개수를 추가한다. from ..

Baekjoon/구현

🥇[백준] 16236 아기 상어 (골드3)

문제요약 나의 코드 및 설명 bfs() : 아기 상어의 위치로부터 이동할 수 있는 칸의 거리를 v 테이블에 저장 find() : v 테이블에 저장된 숫자가 가장 작은 칸이 아기 상어로부터 가장 가까운 거리의 칸이므로, 가장 가까운 거리의 물고기를 구하는 함수 먹을 수 있는 물고기가 없을 때까지 두 함수를 반복한다. from collections import deque #아기 상어의 위치에서부터 이동할 수 있는 칸의 거리를 v 테이블에 저장 def bfs(sx,sy,size): queue = deque() queue.append((sx,sy)) v[sy][sx] = 0 board[sy][sx] = 0 while queue: x,y = queue.popleft() for i in range(4): nx = ..

Baekjoon/구현

🥇[백준] 20055 컨베이어 벨트 위의 로봇 (골드5) / 시뮬레이션, deque의 rotate() 함수

문제요약 나의 코드 및 설명 나는 컨베이어 벨트와, 로봇 위치가 회전하는 것을 직접 구현하였다. #컨베이어, 로봇 위치 회전 def rotate(): x = a.pop() y = b.pop(0) a.insert(0,y) b.append(x) r = robot.pop() robot.insert(0, r) #로봇 이동 def move(): for i in range(n-1,0,-1): #3 , 2, 1 #맨 끝에서부터 if robot[i] == 0 and a[i] >= 1: #로봇이 없고, 내구도가 1 이상이면 if robot[i-1] == 1: #이전 칸에 로봇이 있다면 robot[i] += 1 #현재 칸에 로봇 +1 a[i] -= 1 #내구도 1 감소 robot[i-1] -= 1 #이전 칸 로봇이 현재 ..

Baekjoon/구현

🥇[백준] 17406 배열 돌리기 4 (골드4)

문제요약 나의 코드 및 설명 너비 우선 탐색을 통해 회전할 범위에 있는 좌표를 순차적으로 방문하며, 스택을 활용해 현재 좌표 값을 저장하고, 다음 좌표 방문 시 스택에 저장된 이전 좌표 값으로 갱신한다. 순열 라이브러리를 통해 가능한 모든 회전 연산의 경우의 수를 탐색하여, 최소값을 구했다. from itertools import permutations from collections import deque import copy #한 줄씩 방문하면서 스택에 값을 넣고, 다음 좌표에 값을 넣는다 def bfs(sx,sy,ex,ey,stack,board): queue = deque() v = [[0 for _ in range(m)] for _ in range(n)] v[sy][sx] = 1 stack.appe..

Baekjoon/구현

🥇[백준] 15683 감시 (골드4) / 백트래킹, 구현

문제요약 나의 코드 및 설명 (참고한 코드) fill() : cctv 번호에 맞게 감시 지역을 채우는 함수 dfs() : 가능한 감시 지역을 백트래킹으로 모두 파악 dfs()에서 리스트 cctv에 저장된 cctv정보(cctv번호, x,y)를 하나씩 꺼내고, cctv번호를 통해 가능한 감시 방향을 for문을 통해 탐색하며 fill 함수를 통해 그리드를 업데이트한다. import copy #--------------------함수 정의 부분------------------ #cctv번호에 맞게 감시 지역을 채우는 함수 def fill(board, direction, x,y): for i in direction: #ex) 여기서 direction은 [1,2]...이다 nx = x ny = y while Tru..

Baekjoon/구현

🥇[백준] 3190 뱀 (골드4) / 구현, 큐, 이왜틀 극복

문제요약 나의 코드 및 설명 01 - 질문게시판에 있는 반례 다 통과하는데 틀렸습니다 받음 >> 뱀의 꼬리를 제거할 때 잘못함 전체 그리드 : board[][] 뱀이 있는 좌표 값 : 2 사과가 놓인 좌표 값 : 1 아무것도 없는 좌표 값 : 0 으로 정의하고 문제를 풀었다. 매 초마다 뱀의 움직임을 업데이트하는 move() 함수를 작성하고, 메인 함수 부분의 while문에서 호출하여 뱀이 더 이상 움직일 수 없을 때까지 이동을 반복할 수 있도록 코드를 작성하였다. 예제 입력과 질문게시판 반례를 모두 통과하였지만 계속 틀렸다는 판정을 받았다. 알고보니, 뱀이 방문할 다음 좌표에 아무것도 없는 경우, 다음 좌표를 2로 업데이트하고, 뱀의 꼬리 부분은 0으로 바꿔주어야 하는데 이 부분이 잘못되었다. 처음엔 ..

Baekjoon/구현

🥇[백준] 14891 톱니바퀴 (골드5) / 구현

문제요약 나의 코드 및 설명 톱니바퀴를 시계방향으로 회전시키는 함수 turn_right()와 반시계방향으로 회전시키는 함수 turn_left()를 구현하였다. 기준이 될 톱니바퀴를 입력받고, 왼쪽에 놓인 톱니바퀴들은 idx:6에 영향을 받고, 오른쪽에 놓인 톱니바퀴들은 idx:2에 영향을 받는다. 문제의 조건을 놓치지 않고 따라가면서 모든 톱니바퀴를 탐색하는 방식으로 구현하였다. def turn_right(arr): #시계방향 회전 arr.insert(0,arr.pop()) return def turn_left(arr): #반시계방향 회전 arr.append(arr.pop(0)) return #4개의 톱니바퀴에 대한 상태 저장 gear = [] for _ in range(4): gear.append(li..

Baekjoon/구현

🥇[백준] 14503 로봇 청소기 (골드5) / 구현

문제요약 나의 코드 및 설명 반시계 방향으로 회전시키는 turn_left() 함수를 작성하고, while문을 돌려서 반시계 방향으로 회전 했을 때, 다음 좌표가 청소할 수 있는 좌표라면 방문하고, 그렇지 않다면 회전 카운트(cnt)를 1 증가시킨다. 회전 카운트가 4가 된다면, 동서남북 네 방향을 모두 탐색한 것이므로, 후진할 수 있는지 확인한다. n, m = map(int, input().split()) #n:세로 m:가로 y,x, d = map(int, input().split()) #0:북 1:동 2:남 3:서 board = [] for _ in range(n): board.append(list(map(int, input().split()))) dx = [0,1,0,-1] dy = [-1,0,1,0..

hellosonic
'Baekjoon' 카테고리의 글 목록