Skip to content

Conversation

@holyPigeon
Copy link
Contributor

@holyPigeon holyPigeon commented Feb 27, 2025

🏆 문제별 후기

1️⃣ 7562 / 나이트의 이동 / 🥈 Silver 1 / BFS

문제 설명

체스판 위에 있는 나이트가 좌표1에서 좌표2로 가고자 할 때, 최소 몇 번에 걸쳐 도착할 수 있는지 알아보는 문제이다.

예상되는 접근 방법

  • 나이트가 좌표평면에서 이동하는 방법이 좀 특이하기 때문에 이에 따라 dx, dy를 설정해야 할 듯 하다.
  • 그 외에는 일반적인 BFS와 다른 게 없을 듯? 하다. (실버 1이자너)

풀이

image

  • 체스에서의 나이트의 이동방식이 다소 특이하기 때문에 dx dy를 좀 특별하게 설정해야 한다.

    static int[] dx = {-1, -1, 1, 1, -2, -2, 2, 2};
    static int[] dy = {-2, 2, -2, 2, 1, -1, 1, -1};
  • 그 외에는 일반적인 BFS와 비슷하다. 최소 거리를 구하기 위해 출발지부터 목적지까지 +1을 하면서 간다.

  • 맨 마지막에는 map[도착지 i 좌표][도착지 j 좌표] 값을 출력하면 끗!

후기

  • 아오 BFS 문제 아직 많이는 안 풀어봐서 기본 개념 자체가 헷갈리다보니까 푸는데 좀 걸렸다

  • 예상했던대로 dx dy 설정 외에는 딱히 신경쓸 부분이 없었다.

  • 최소 거리를 구하는 문제여서 좌표평면 상에 가는 길마다 +1을 해야 됐는데,

    오랜만에 봐서 좀 헷갈리긴 했지만 그래도 무사히 풀었다.

2️⃣ 13549 / 숨바꼭질 3 / 🥇 Gold 5 / BFS

문제 설명

  • 수빈이와 동생이 숨바꼭질을 하는데, 몇 초만에 동생이 잡히는지 알아내는 문제이다.

예상되는 접근 방법

  • 기존처럼 기본적인 BFS 풀이를 바탕으로 수평선위에 현재 좌표 = 전 좌표 + 1 로 기록을 하되,

    순간이동의 경우 시간이 소모되지 않으므로 그 부분에 대한 조건을 추가하면 쉽게 풀 수 있을 것 같다.

풀이

image

  • 원래라면 map[x] = 0일 경우 → 방문하지 않은 곳이라 판단해도 됐는데, 순간이동의 값이 0인 관계로

    map[x] = 0인 곳도 순간이동으로 이미 방문한 곳일 수 있다. (0이 최소 이동거리일 수 있음)

    → 따라서 따로 visited 배열을 통해 방문처리를 해줘야 한다.

  • 내가 기입하려는 이동거리가 기존에 적힌 값보다 작은가? 를 판단할 때, 순간이동과 일반이동을 구분지어서 판단해야 한다.

    • 일반 이동의 경우, 무조건 1초가 지나기 때문에 → map[next] <= map[cur] + 1
    • 순간 이동의 경우, 0초가 지나기 때문에 → map[next] <= map[cur]
    • 이는 동적으로 구현 가능 → map[next] <= map[cur] + move.time
  • 일반적으로 순간이동을 사용할 때가 시간이 덜 걸리기 때문에

    → 3가지 이동 중 2개 이상을 통해 동시에 도착할 수 있다면, 순간 이동을 사용해야 한다.

    → 이를 위해 moves 배열의 맨 앞에 순간 이동을 위치시킨다.

    Move[] moves = new Move[3];
    moves[0] = new Move(cur * 2, 0);
    moves[1] = new Move(cur - 1, 1);
    moves[2] = new Move(cur + 1, 1);
    
    ...
    
    if (moves[i].next == end) {
    		break;
    }

후기

  • 뭔가 난이도가 실버 1에서 골드 5로 올라온 거 치고는 좀 높았다;; 골드 4.5 정도 되는 듯
  • 자잘한 조건이 3~4개 정도 추가돼서 좀 당황하긴 했는데, 그래도 혼자 푼 게 뿌듯하다.
    • 근데 이건 숨바꼭질 1 문제를 풀어봤기 때문에 더 그런 것 같다.
    • 기존 문제를 풀어냈던 기억 때문에 선입견이 생겨서 몇 가지를 놓쳤다.
  • 좀 더 어려운 문제를 풀어봐야 BFS가 완전히 잡힐 것 같다. 아직은 좀 불안불안 한 듯

😎 전체 후기

  • 근 1년 동안 알고리즘을 이렇게 꾸준히 한 적이 있나? 싶다. 스터디 벌금 덕분에 개열심히 하는 중
  • 일주일 동안 문제를 많이 푸는 건 아닌데, 전에 했던 거 안 까먹고 꾸준히 발전하는 것 같아서 기분이 좋다.
  • 다음에 코테 볼 기회가 있으면 어느정도 자신감은 가지고 도전해봐도 될 것 같다.
  • 근데 코테 연습을 안 해서 시스템을 아직 잘 모른다. 좀 틀리더라도 슬슬 연습은 해봐야 할 것 같다.

@holyPigeon holyPigeon self-assigned this Feb 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants