본문 바로가기
Algorithm/BOJ

[BOJ]1194번: 달이 차오른다, 가자.

by BAYABA 2020. 5. 17.

 

문제: https://www.acmicpc.net/problem/1194 


비트 연산자 + BFS 문제입니다.

 

A~F는 6개의 문자로 

{공집합, ... , {a,b,c,d,e,f} } 까지의 부분집합은 2^6 = 64개로 나타낼 수 있습니다.

총 64개의 state가 존재한다고 표현하겠습니다. 

그래서 [64][N][M] 만큼의 방문(상태)배열이 존재하게 됩니다.

 

그러면 각 칸을 순회할 때 가지고 있어야 할 정보는 아래와 같이 네 가지 정보입니다.

{ 현재 STATE(0~64), Y좌표, X좌표, MOVE_CNT }

 

열쇠칸을 만났다면 OR 연산자를 통해 현재 STATE에 특정 열쇠를 더해줍니다.

int NEW_STATE = NOW_STATE | (1<< NOW_KEY)

 

문 칸을 만났다면 AND 연산자를 통해 현재 STATE로 이 문을 열 수 있는지 판단해줍니다.

int RESULT = NOW_STATE & (1<< NOW_DOOR)

RESULT가 양수라면 문을 열 수 있고, RESULT가 0이라면 문을 열 수 없습니다.


코드: https://github.com/cottory/algorithm/blob/master/BOJ/BOJ1194.cc

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ]16957번: 체스판 위의 공  (0) 2020.05.19
[BOJ]17837번: 새로운 게임2  (0) 2020.05.18
[BOJ]17822번: 원판 돌리기  (0) 2020.05.15
[BOJ]4358번: 생태학  (0) 2020.05.10
[BOJ]14425번: 문자열 집합  (0) 2020.05.08