test: test용 코드 추가 (6) #177
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🌱WIL
[벽 부수고 이동하기]문제의 경우에는 visited 리스트를 3차원으로 관리하는 것이 신선했다. wall부분을 나누어 2개의 최단경로로 관리했다.[구슬탈출]문제는 visited 리스트를 처음에 초기화해놓지 않고 방문할 때마다 방문한 구슬의 위치를 추가하는 식으로 상태를 관리했다. 방문 로직 처리를 이렇게 처리하는 방식이 신선하고 앞으로 풀 때 참고해야겠다고 생각이 들었다.0이나O와 같은 문자를 착각하기도 하고, 문제를 제대로 이해 안 하고 접근하기도 했다. 이런 부분은 반성하고 문제를 온전히 이해하는데에 시간을 더 써야 할 것 같다.🚀주간 목표 문제 수: 5개
백준 #2206. 벽 부수고 이동하기 : BFS / 골드3
정리한 링크: (바로가기)
🚩플로우 (선택)
맵 크기와 맵 정보를 입력받는다. 행: N, 열: M, 각 행의 정보: maps
maps 리스트에서 0은 이동 가능한 곳, 1은 벽이다.
방문 배열을 초기화한다.
visited[x][y][0]: 벽을 뚫지 않고 도달했을 때의 최단 거리.visited[x][y][1]: 벽을 한 번 뚫고 도달했을 때의 최단 거리.(0, 0, 0)시작 위치에서 초기 값은1로 설정한다BFS 큐를 초기화하고 탐색 방향을 설정한다.
queue = deque([(0, 0, 0)]): BFS 시작 위치(벽 미뚫음 상태).directions = [(-1, 0), (0, 1), (1, 0), (0, -1)]: 상우하좌 4방향 설정.BFS 탐색을 수행한다.
(x, y)와 벽 부순 상태wall을 큐에서 꺼낸다.(N-1, M-1)이라면, 최단 경로visited[x][y][wall]출력 후 종료한다.nx,ny)nx,ny가 맵 범위를 벗어나면 무시한다.maps[nx][ny] == 1)wall == 0):visited[nx][ny][1] = visited[x][y][0] + 1queue.append((nx, ny, 1))추가한다.maps[nx][ny] == 0)visited[nx][ny][wall] == 0):visited[nx][ny][wall] = visited[x][y][wall] + 1queue.append((nx, ny, wall))추가.BFS 탐색이 종료될 때까지 목표 지점에 도달하지 못한 경우
-1을 출력한다.🚩제출한 코드
💡TIL
visited리스트를 3차원으로 관리하는 것이 신선했다.wall = 1로 직접 변경했는데, BFS는 경로별로 독립적인 상태 관리가 필요하기 때문에 직접 변수로 대입하면 방문할 때 문제가 생긴다는 것을 알게 되었다. 이 부분은 앞으로 주의해야겠다.백준 #11727. 2xn 타일링 2: DP / 실버3
정리한 링크: (바로가기)
🚩플로우 (선택)
n을 받는다.dp를 초기화한다.dp[1] = 1설정한다.n >= 2일 경우dp[2] = 3으로 설정한다.dp[i] = dp[i-1] + 2 * dp[i-2]를 계산한다. 이때 dp에 저장할 때 10007로 나눈 나머지값을 저장한다.dp[n]을 출력한다.🚩제출한 코드
💡TIL
백준 #1026. 보물: 그리디 / 실버4
정리한 링크: (바로가기)
🧠풀이 아이디어
A[i]는 가장 큰 값B[i]와 곱해야 한다.B가 고정되어 있다고 했지만, 계산 시 정렬을 해도 결과는 동일하다.A는 오름차순 정렬, 배열B는 내림차순 정렬을 수행하면 항상 최소값을 만들 수 있다.🚩플로우 (선택)
N, 배열A, 배열B를 입력받는다.A는 오름차순으로 정렬하고B는 내림차순으로 정렬한다.A[i] * B[i]를 모두 더한 값을answer변수에 저장한다.answer를 출력한다.🚩제출한 코드
💡TIL
A와B가 서로 어떻게 정렬되어야 최소값이 나오는지를 판단하는 것이 핵심이었다.pop()을 사용한 다른 풀이 방식을 보고 흥미로웠다. 하지만 이 문제의 제한 시간 범위 안에서는 정렬로 풀어도 시간복잡도와 가독성 면에서 효율적인 것 같다.백준 #2217. 로프 : 그리디 / 실버4
정리한 링크: (바로가기)
🧠 풀이 아이디어
해당 로프의 최대 중량 × 사용된 로프 수를 계산한다.🚩플로우 (선택)
로프 개수
N과 각 로프의 최대 중량을 입력받는다. 최대 중량은rope리스트에 저장한다.rope의 최대 중량을 내림차순으로 정렬한다.첫 번째 로프부터 하나씩 추가하며, 현재 사용된 로프 수에 따라 최대 중량을 계산한다.
현재 로프의 하중 × 사용된 로프 수최대 중량 값을 업데이트하며, 최종 계싼된
max_weight를 출력한다.🚩제출한 코드
💡TIL
백준 #13460. 구슬 탈출 2: BFS / 골드1
정리한 링크: (바로가기)
🚩플로우 (선택)
N, M을 입력받아 보드의 세로와 가로 크기를 설정한다.board리스트에 각 행의 보드 상태를 입력받는다.'.','#','O','R','B'로 이루어진다.R과 파란 구슬B의 초기 위치를 찾는다.visited는(rx, ry, bx, by)형태로 저장해 빨간 구슬과 파란 구슬의 상태를 관리한다.set을 사용해 중복 상태를 방지하고, 처음 위치(rx, ry, bx, by)를 큐에 넣고 방문 처리한다.queue = deque([(rx, ry, bx, by, 1)])(rx, ry, bx, by, 1): 빨간 구슬과 파란 구슬의 초기 위치와 이동 횟수(1부터 시작).directions = [(-1, 0), (0, 1), (1, 0), (0, -1)](rx, ry, bx, by, depth)를 꺼낸다.depth가 10을 초과하면 실패로 간주하고1을 출력한 후 종료한다.move()함수를 사용해 구슬이#(벽)을 만나거나O(구멍)에 빠질 때까지 이동한다.depth를 출력하고 프로그램을 종료한다.(nrx, nry, nbx, nby)가visited에 없다면 큐에 추가하고 방문 처리한다.1을 출력한다.🚩제출한 코드
💡TIL
O를0(숫자 0)으로 착각하고 풀었던 게 문제였다… O나 0이나 그냥 문자로 보면 비슷해보여서 헷갈렸던 것 같다.0인지O인지 주의해서 풀어야겠다. 비슷한 문자에 주의하자!!set과튜플로 관리하면서 BFS를 효율적으로 구현할 수 있었다.