[Algorithm] 백준 17837 새로운 게임 2

윰진·2023년 3월 21일
0

면접

목록 보기
4/11

문제

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분 컷이다 ..! (다짐)

0개의 댓글