본문 바로가기

반응형

TIL

(12)
99클럽 코테 스터디 12일차 TIL: 3차원 그래프 문제https://www.acmicpc.net/problem/7576풀이토마토 문제와 비슷한 문제이다.조금 다른점이 하나 있는데 높이가 추가되었다는 점이다.기존에 상하좌우로 퍼졌던 토마토가, 상하좌우 위아래(?) 두 방향이 추가되었다.나는 이런 문제를 풀 때, 기존에 방향을 설정해줄 변수로 dy, dx을 다음과 같이 정의하였다.let dy = [1, 0, -1, 0]let dx = [0, 1, 0, -1]북동남서 방향으로 시계방향으로 정의하였었는데, 이제 추가로 z축도 필요하다고 생각했다.그래서 방향을 다음과 같이 정의했다.let dz = [0, 0, 0, 0, 1, -1]let dy = [1, 0, -1, 0, 0, 0]let dx = [0, -1, 0, 1, 0, 0]여기까지 이해했다면 반은 풀었다고..
99클럽 코테 스터디 11일차 TIL: DFS 문제https://www.acmicpc.net/problem/25195풀이문제 이해하는데 시간이 조금 걸렸던 문제이다.이 문제를 간단히 설명하면, 1번 노드에서 팬클럽 곰곰이를 거치지 않고 간선이 없는 노드로 도착이 가능한지를 찾는 문제이다.DFS, BFS로 풀이할 수 있을 것이라고 생각했다.DFS로 풀었는데 (요즘 맨날 BFS로만 푸는 것 같아서..)다음 노드를 탐색할 때, 해당 노드가 팬클럽 곰곰이가 있는 노드라면 탐색을 진행하지 않았다.그 이외에는 탐색을 진행하면서, 현재 노드로 부터 간선이 없는 노드라면, 팬클럽 곰곰이를 거치지 않고 여행을 한 것으로 판단해주어서 풀었다.소스코드후기문제 자체는 어렵지 않았는데 이해하는 것이 어려웠다.. 독해력을 길러야겠다고 느꼈다.
99클럽 코테 스터디 10일차 TIL: 방향 그래프 벌써 10일차라니.. 시간 정말 빠르다.문제https://www.acmicpc.net/problem/18352풀이이 문제는 99클럽 코테 스터디 중에 등장한 적 없었던 방향 그래프 문제이다.여태 무방향 그래프 문제만 나왔었는데, 이번엔 방향 그래프 문제가 나왔다.사실 방향 그래프라고 해서 뭐 대단한 것은 없고말 그대로 간선에 방향이 있는 것이다.이 문제에서는 x노드에서 최단 거리가 k인 노드들을 찾는 문제이다.최단 거리를 찾는 것이므로, BFS 알고리즘을 사용해서 풀 수 있었다.간선의 비용이 동일할 때 최단거리임을 보장하기 때문이다.소스코드후기BFS 알고리즘에 이해가 있다면 쉽게 풀 수 있는 문제였다.
99클럽 코테 스터디 9일차 TIL: BFS 문제https://www.acmicpc.net/problem/7562풀이나이트가 해당 좌표로 최소 몇 번 만에 이동할 수 있는지 구하는 문제최소 몇번 -> 최단 거리를 뜻하기 때문에 BFS를 떠올려서 풀이할 수 있었다.일단 나이트의 이동은 8방향이다.나이트의 현재 위치에서 이동할 수 있는 방향을 확인하기 위해 dy, dx 값을 배열로 만들었다.let dy = [2, 1, -1, -2, -2, -1, 1, 2]let dx = [1, 2, 2, 1, -1, -2, -2, -1]와 같은 형식으로 만들었다.let position = [(2, 1), (1, 2), (-1, 2)...(2, -1)]과 같이 만들어도 무방하지만 나는 첫번째 방법을 선호한다.또한 나이트의 현재 위치에서 이동하려는 위치가 체스판을 넘어가..
99클럽 코테 스터디 8일차 TIL: 그래프 문제https://www.acmicpc.net/problem/2644풀이전형적인 그래프 문제이다.문제에서는 촌수를 계산하고 머 어렵지 않게 써놨지만,이 문제는 모든 간선의 비용이 1인 노드사이의 거리를 출력하라는 것과 동일하다.DFS, BFS 두 알고리즘으로 쉽게 풀 수 있는 문제였다.소스코드후기어렵지 않게 풀 수 있는 문제였다.챌린저 문제를 풀었어야 하는데.. 여러번 시간이 없다는 핑계로 안풀고 있다.내일이랑 모레도 바쁠텐데 꼭 풀어보려고 노력해야지.
99클럽 코테 스터디 7일차 TIL: 트리 문제https://www.acmicpc.net/problem/1240풀이접근방법이 문제에서 명확하게 "트리" 라고 알려주었다."트리"는 무뱡항 그래프이다.DFS, BFS 등 트리를 구현해서 풀 수 있겠다고 생각했다.DFS, BFS로 풀 때, 간선의 비용을 graph에 저장해두어야 겠다고 생각했다.그래서 그래프의 자료형을 [[(Int, Int)]] 형식으로 튜플의 2차원 배열로 선언해주어야겠다고 생각했다.물론 Struct나 Class, typealias 만들어줬어도 상관없다.첫번째로 풀이했을 때는 DFS로 풀어보았다.문제에서 간선의 개수는 노드의 개수 - 1 이고 같은 노드 번호는 주어지지 않으므로, 모든 노드가 연결되어있음을 알 수 있었다.startNode에서 DFS를 수행했다. startNode에서 D..
99클럽 코테 스터디 6일차 TIL: 그래프 문제https://www.acmicpc.net/problem/2458풀이일단 어떤 알고리즘을 사용해서 풀어야할 지 고민을 해봤다.문제에 나와있는 그래프를 보면 4번만 자신의 키 순서를 명확히 할 수 있었다.그 이유는 자기보다 작은 학생의 수 + 큰 학생의 수를 했을 때, 자기를 제외한 총 학생의 수이기 때문이다.입력으로 키를 비교한 결과를 보여주고 있다.이는 방향 그래프를 의미하며 문제에 나와있는 그래프와 동일하게 구현할 수 있다.그래서 4번 학생을 시작노드로 DFS 혹은 BFS를 수행했을 때는 2번 6번에 도달할 수 있다.이는 4번보다 큰 학생이 2번, 6번 총 2명이라는 뜻이다.4번 보다 작은 노드는 어떻게 처리할 수 있을까.4번 노드에 방문이 가능하다면, 4번보다 작다는 것으로 알 수 있지 않을까?..
99클럽 코테 스터디 5일차 TIL: BFS 문제https://www.acmicpc.net/problem/24444풀이문제 이름에서 나와있는대로 BFS를 구현하는 문제이다.BFS는 많이 풀어봤던 문제이고 로직 또한 익숙했다.문제에서 무방향 그래프로 나타나있어서, 인접행렬 혹은 인접리스트로 구현할 때 처리를 해주어야 했다.추가로 오름차순 순으로 방문해야 하기 때문에, 정렬이 필요했다.BFS는 Queue 자료구조를 사용하는데, Queue에 넣을 때 방문한 순서를 1증가시켜 주었다.또한 visited 배열을 방문한 순서를 들고 있도록 하기 위해 Int 배열로 만들어주었다.여기서 visited[i] = 0 이면 미방문 노드이고, 2라면 2번째 순서로 방문한 노드와 같이 생각하면 된다.문제에서 방문하지 못하는 노드의 순서는 0으로 처리하라고 되어있어서 그 ..

반응형