algoqna

[BOJ14466] 소가 길을 건너간 이유 6 본문

프로그래밍/기타 문제풀이

[BOJ14466] 소가 길을 건너간 이유 6

kkalgo 2023. 7. 7. 10:05
 

14466번: 소가 길을 건너간 이유 6

첫 줄에 N, K, R이 주어진다. 다음 R줄에는 한 줄에 하나씩 길이 주어진다. 길은 상하좌우로 인접한 두 목초지를 잇고, r c r′ c′의 형태 (행, 열, 행, 열)로 주어진다. 각 수는 1 이상 N 이하이다.

www.acmicpc.net

1. 내 위치를 기준으로 다음 위치로 가는 곳이 '길'인 경우를 판단해야 함

   - 길의 좌표가 주어질 때 좌표를 기준으로 어느 방향이 길인지를 체크한다.

   - boolean map[N+1][N+1][4] 의 형태로 정방향과 역방향을 표시한다.

   - 역방향 표시는 reverse[] 배열을 이용한다.

 

2. 소의 위치를 저장시킬 배열 boolean positionOfCow[N+1][N+1]

 

3. bfs는 소의 수 만큼 실시(K번)

   - 소의 위치를 기준으로 갈 수 있는 곳을 4방탐색하여

   - 정해둔 if문을 넘어가는 경우만 다음 곳으로 갈 수 있게 한다.

 

// 주석 파일 참고

/*
1. 길의 표시
    특정 위치 (x,y)에서 인접한 4 방향 중 다리가 연결될 것.
    그러면, map[N+1][N+1][4]의 꼴로 내 위치 기준으로 어느 방향으로 가는 곳에 길이 있는지, 
    다음 위치에서도 길이 어느 방향인지 파악.
    boolean map[N+1][N+1][4] 필요

    []xDirection = {-1,0,1,0};
    []yDirection = {0,1,0,-1};
    (2,2)를 기준으로 4방은 (1,2) (2,3) (3,2) (2,1)

    (1,2) 기준 (2,2)가 되려면 2
    (2,3) 기준 (2,2)가 되려면 3
    (3,2) 기준 (2,2)가 되려면 0
    (2,1) 기준 (2,2)가 되려면 1
    즉 []reverse = {2,3,0,1}



    2. 소의 위치 & 소 배열 선언
    소의 수를 담을 배열 Coordination cowArr[K]
    소의 위치는 boolean positionOfCow[N+1][N+1]

    3. 알고리즘 - bfs
      1) 소의 수 만큼 bfs 실시
        가) Queue, boolean visited[N+1][N+1]
        나) 예외조건
            1) 범위 안에 안들어와있거나, visited[nx][ny]인 경우
            2) 어느 방향으로 나아가려 하는데 그게 길인 경우

        다) cnt 증가 조건
            1) 다른 소를 만난 경우 cnt 증가

        위의 경우가 아니면 방문처리 후 큐에 삽입.


     */​

 

https://github.com/ssjjaa-algo/AlgoAndMySQL/blob/master/src/Baekjoon/BOJ14466.java

 

'프로그래밍 > 기타 문제풀이' 카테고리의 다른 글

[BOJ18113] 그르다 김가놈  (1) 2023.07.21
[BOJ14437] - LCA  (0) 2023.07.11
[BOJ2812] 크게 만들기  (0) 2023.07.04
[BOJ2146] 다리 만들기  (0) 2023.06.29
[BOJ1011] Fly me to the Alpha Centauri  (0) 2023.06.28