[BOJ20056] 마법사 상어와 파이어볼

Updated:

문제

  • n*n 격자에 파이어볼 m개, 위치 (r, c), 질량 m, 방향 d, 속력 s
  • 방향 8방향, 상단부터 시계방향으로 0 ~ 7
  • 파이어볼 이동 : d * s (파이어볼 겹쳐도 됨)
  • 이동이 모두 끝나면, 2개 이상 파이어볼에는 다음 처리
    • 파이어볼 모두 합치기
    • 4개의 파이어볼로 나누기
    • 질량 : sum/5, 속력 : sum/num
    • 방향 모두 홀수||짝수 : (0, 2, 4, 6), 아니면 (1, 3, 5, 7)
  • 질량이 0인 파이어볼은 소멸

입력

  • n, m, k
  • m개의 줄에 파이어볼의 정보 (r, c, m, s, d)
  • 서로 다른 두 파이어볼의 위치가 같은 경우는 입력 X

출력

  • 마법사 상어가 이동을 K번 명령한 후, 남아있는 파이어볼 질량의 합을 출력

설계

  • k번만큼 파이어볼 이동, 겹친 파이어볼 분리
  • 파이어볼을 넣을 vector<FIREBALL> fireballs 선언, 지형을 나타내는 2차원 배열 vector<int> board[50][50] 선언
  • 파이어볼 이동
    • newBoard 선언, 이동하면 여기에 담아서 차후에 board에 덮어 씌우기
    • 속도 : s % n
    • 위치 nx, ny : (current_position + (d * s) + n) % n
  • 파이어볼 분리
    • newFireballs 선언, 차후에 fireballs 에 덮어 씌우기
    • 2차원 지형을 전부 탐색하며 갯수에 따라 처리
    • 1개면 바로 newFireballs에 저장
    • 2개 이상이면 위 조건에 맞추어 구현

How I solved(click to github)


ref :
BOJ20056

Leave a comment