Today
Total
Archives
05-08 18:54
관리 메뉴

tony9402

[백준 23288] 주사위 굴리기2 본문

알고리즘

[백준 23288] 주사위 굴리기2

ssu_gongdoli 2021. 10. 25. 05:56
반응형

학습 돌릴 거 돌리다가 무의식적으로 백준을 들어갔더니 새로운 문제가 쏟아졌다. 그중에 주사위 굴리기 2라는 제목을 보고 뭔가 삼성 기출인 거 같아서 한번 풀어봤다.

 

역시 귀찮은 구현..

역시 주사위 전개도가 주어지고 이를 잘 돌려야하는 문제이다. 노가다로 할 수도 있겠지만.... 

이런 문제 같은경우는 인덱스를 잘 활용하면 좀 더 수월하고 실수 없이 풀 수 있다.

 

 

 

주사위 전개도에서 각 면에 번호를 붙인 사진
 
 

 

위 그림 중 왼쪽 그림은 주사위 전개도에서 각 면에 인덱스를 붙인 사진이고 오른쪽 사진은 각 면이 어떤 방향을 바라고 보고 있는지 적어놓은 것이다. 

 

주어진 주사위 전개도

위 그림은 문제에서 주어진 주사위 전개도 모양이다. 이를 잘 이용해서 동서남북 방향으로 어떻게 변화하는지 체크를 한 후 코딩만 하면 된다. 아래 4개의 그림들은 위 전개도에서 동서남북 방향으로 이동했을 때 변화된 전개도의 사진들이다.

 

남쪽으로 굴렸을 경우
북쪽으로 굴렸을 경우
서쪽으로 굴렸을 경우
동쪽으로 굴렸을 경우

이런 방향으로 움직이는걸 인덱스로 표현하면 아래와 같다.

이런 식으로 인덱스 정보를 담아놓으면 아래와 같은 함수 하나로 주사위를 동서남북 돌리고 싶은 방향으로 돌릴 수 있다.

 

아래 설명도 요즘은 많이들 알고 있는 기법이겠지만 간단히 작성하고 넘어가려고 한다. 바로 4방향을 방향벡터로 표현하면 좀 더 간단한 코딩을 할 수 있다. 

그리고 방향을 시계 방향 회전(dtr), 반시계 방향 회전(drtr)으로 방향을 나타내는 인덱스로 표현하면 쉽게 할 수 있다. 아래 그림은 문제 조건에 따라 시계 방향, 반시계 방향으로 돌리게 구현한 것이다.

 

전체적인 로직은 생각보다 간단하다. 하지만 이를 구현하는 것은 좀 귀찮다.. 아래는 전체적인 로직이다.

 

  1. 동서남북 방향으로 같은 숫자들이 있는 구간의 넓이 구하기 -> labeling (백준 2667번이랑 거의 같음)
  2. K번 동안 주사위 굴리기
    2-1. 주사위가 바라보고 있는 방향으로 이동할 수 있는지 판단
    2-2. 벽으로 막혀있다면 바라보고 있는 방향 뒤집기
    2-3. 바라보고 있는 방향으로 굴리기
    2-4. ans += 현재 위치에 있는 숫자와 전처리로 계산한 넓이 곱
    2-5. 문제에 주사위 방향 돌리는 그대로 진행
  3. 답 출력

 

해당 문제의 태그는 아래와 같을 것 같다.

  1. 너비 우선 탐색
  2. 깊이 우선 탐색
  3. 그래프 탐색
  4. 구현
  5. 시뮬레이션

 

반응형

'알고리즘' 카테고리의 다른 글

[C언어] 한 줄 입력 받을 때 어떻게 써야 해요?  (1) 2021.10.17
Comments