본문 바로가기

알고리즘 문제풀이/코드트리(삼성 기출)

정육면체 한번 더 굴리기(2021 하반기 오전 1번, 백준 23288 주사위 굴리기 2)

문제 링크: https://www.codetree.ai/frequent-problems/cube-rounding-again/description

 

코드트리

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

*같은 문제: 백준 23288 - 주사위 굴리기 2

 

주사위를 구현해서 돌려야 하는 문제. 오타를 좀 빨리 찾아서 대충 1시간 조금 넘게 걸린 것 같은데, 제발 실수하지 말자...

 

먼저 각 칸이 어디에 속하는지 DFS를 돌려주는데, 각 군집별로 가장 먼저 탐색하기 시작한 칸의 visited에는 추가로 각 군집에 속하는 칸이 몇 개인지를 저장한다. visited에는 각 칸이 속하는 군집을 탐색할 때, 가장 먼저 탐색한 칸의 좌표를 저장했고, 이렇게 점수 계산할 때 한 번에 몇 칸 연결되어 있는지 찾을 수 있도록 했다. 다른 더 좋은 아이디어가 있으려나?

 

주사위는 dice에 현재 방향으로 계속 굴렀을 때 나올 수 있는 숫자 4개를 순서대로 저장하고, 오른쪽(시계) 또는 왼쪽(반시계) 방향으로 틀었을 때 나올 수 있는 숫자들을 따로 r_dice, l_dice에 저장한다. 오른쪽 또는 왼쪽으로 방향을 틀 때, 그리고 격자 바깥으로 나가서 방향을 바꿔야 할 때마다 dice, r_dice, l_dice를 업데이트 하는 식으로 주사위 구현을 했다.