문제 풀이/코드트리
-
코드트리 - 왕실의 기사 대결 [C++]문제 풀이/코드트리 2024. 10. 12. 20:26
이 문제는 시뮬레이션 문제이다. 이 문제에서 핵심은 연쇄적으로 발생하는 기사들의 움직임을 구현하는 것이다. 나는 이걸 구현하기 위해 재귀를 사용했다.어떤 기사가 어떤 방향으로 움직여야할 때, 방패까지 포함한 자신의 경계를 구하고, 그 경계에서 다음 위치를 확인한 뒤 만약 다른 기사가 있어면 그 기사에 대해 재귀적으로 호출하는 방식으로 구현했다. 실제로 움직임을 구현할 때 주의해야할 점이 있는데, 우선 이미 움직인 기사를 또 움직이면 안된다. 내 코드의 경우 move 함수 안에서 candidate를 뽑아 진행하는데, 중복이 가능하여 처음에 오답이 나왔었다.또한 움직인 기사들 말고도 안 움직인 기사들도 다음 벡터에 남아야 한다. 너무 당연한 로직인데 항상 실수하는 부분인 것 같다.#include #inclu..
-
코드트리 - 고대 문명 유적 탐사 [C++]문제 풀이/코드트리 2024. 10. 8. 15:19
이 문제는 BFS, 시뮬레이션 문제이다. 이 문제에서 핵심은 부분 배열 회전, bfs 구현이다. 부분 배열 회전의 경우 이중 벡터와 함께 큐를 사용해서 구현했다. 좌표를 정확히 구현할 수도 있지만, 실제 코딩 테스트에서는 정확하고 빠르게 구현할 수 있는 직관적인게 좋다고 느꼈다. 보통 삼성 문제의 1번 문항은 구현력 위주고, 메모리나 성능에 대해서는 크게 걱정 안해도 되었기 때문에 이렇게 구현하는 게 나았다. 유물을 획득하는 것에 있어서는 bfs가 자신이 탐색한 위치들의 벡터를 리턴하도록 하여 구현했다. bfs 결과에 따라서 삭제할지 말지를 결정해야 하기 때문에 이를 리턴함으로써 사이즈가 3보다 작으면 삭제하지 않도록 했다. 침착하게 풀면 생각보다 쉽게 풀 수 있었다.#include #include #i..
-
코드트리 - 마법의 숲 탐색 [C++]문제 풀이/코드트리 2024. 10. 8. 12:28
이 문제는 구현 문제이다. 나는 이 문제를 읽고 크게 두 파트로 나뉜다고 생각했다. 골렘이 이동하는 파트, 정령이 이동하는 파트 두 개로 분리하여 문제를 풀었다. Golem이라는 구조체를 정의하여 골렘을 나타냈다. 골렘의 한 가운데 좌표를 저장하고, 출구 위치를 저장하는 식으로 구현했다. 골렘 이동을 구현하는 것은 사실 단순하다. 그림에 나와있는 대로 상대 좌표를 검사하고, 모두 비어있으면서 격자를 벗어나지 않으면 이동시키면 된다. 문제는 정령을 이동시키는 것인데, 여기서는 DFS(재귀), BFS 모두 가능하다. 그런데 한 가지 유의할 점은 두 방식 모두에서 반드시 이미 타고 간 골렘은 다시 탐색하지 않아야 한다는 것이다. 처음에 재귀로 문제를 풀었다가 이 부분을 놓치고 BFS로 바꿔 문제를 해결했는데,..