문제
01. 개요
체스판과 말을 이용한 새로운 게임 !
- NxN 체스판과 K개의 말을 사용한다.
- 하나의 말 위에 다른 말을 올릴 수 있다.
- 체스판의 각 칸은 흰색, 빨간색, 파란색 중 하나로 색칠되어 있다.
- 말은 1번부터 시작하며, 체스판의 가장 왼쪽 위는 (1,1) 이다.
- 이동 방향은 위, 아래, 왼쪽, 오른쪽이다.
Rule
- 하나의 말이 이동할 때 위에 올려져 있는 말도 함께 이동한다.
- 이동하려는 칸의 색에 따라 동작이 다르다.
- 흰색
- 이동하려는 말부터 순차적으로 다음 칸으로 이동한다.
- 빨간색
- 이동하려는 말의 가장 위에 있는 말부터 역순으로 다음 칸으로 이동한다.
- 파란색 / 말이 판을 벗어났을 때
- 이동하려는 말의 방향을 반대로 하고 한 칸 이동한다.
- 이동하려는 칸의 색에 따라 행동한다.
- 단, 파란색 또는 말이 판을 벗어나는 경우는 방향을 바꾸지도, 이동하지도 않는다.
- 한 칸에 4개의 말이 쌓이면 턴 수를 반환하고 종료
- 1000번의 턴 이내에 게임이 끝나지 않을 경우 -1을 반환하고 종료
참고
- 체스판의 최대 크기는 12, 말은 최대 10개까지 사용, 최대 턴 수는 1000이다.
- 12 12 10 4 1000 = 5760000 (최대 570만)
02. 문제 접근 방법
🍒 체스판과 말을 별도로 관리하는 방법을 사용
- 말이 동시에 움직이는 것이 아니라 순차적으로 움직이기 때문에 체스판을 하나만 사용했다.
KEY
체스판을 3차원 배열로 두고, 0번째 index를 칸의 색깔, 1번째 index를 말이 위치한 가장 마지막 index로 두었다.
WARN
말이 다음 칸으로 움직일 때, 체스판과 말 데이터를 함께 갱신해주어야 한다.
WARN
각 말이 움직이면서 4개의 말
이 하나의 칸에 들어오는 순간 게임이 종료된다.
- 턴이 끝나고 확인하는 것이 아니다.
- 🐾 마지막 예제 케이스가 맞지 않는다면 이 부분을 확인해보자.
03. 결론
1 ) 겪었던 문제점
a ) 다음 칸이 파란색일 때 동작
- 말이 여러 개 쌓인 경우, 모든 말의 방향을 바꾸어주어야 하나? 잠깐 헷갈렸음
- 문제의 조건 상, 이동하려고 했던 말의 방향만 바꾸어줌
b ) 코딩 실수
- 한 칸에 4개의 말이 쌓인 경우 turn 수를 출력하고 게임을 종료
- 코딩 실수로 말이 4개 이상 쌓인 칸이 있더라도 게임이 끝나지 않는 경우가 있음
2 ) 보완할 점
3 ) 문제풀이 후 참고한 풀이
4 ) 느낀점
엄한 곳에서 실수만 하지 않았더라면 더 쉽게 느껴졌을 문제
문제에서 말하는대로 차근차근 코딩해가면 된다.
요즘 나오는 문제들 보다는 쉽다고 느꼈다.
🍒 다시 풀 땐 20분 컷이다 ..! (다짐)