Merged
Conversation
2025-04 챌린지 진행 상황
|
2025-04 챌린지 진행 상황
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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를 효율적으로 구현할 수 있었다.