알고리즘/BOJ

백준 20058번 마법사 상어와 파이어스톰

꾸준함. 2021. 5. 3. 02:00

문제 링크입니다: www.acmicpc.net/problem/20058

 

20058번: 마법사 상어와 파이어스톰

마법사 상어는 파이어볼과 토네이도를 조합해 파이어스톰을 시전할 수 있다. 오늘은 파이어스톰을 크기가 2N × 2N인 격자로 나누어진 얼음판에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c

www.acmicpc.net

기존 마법사 상어 문제들과 비슷한 유형이었습니다.

 

알고리즘은 아래와 같습니다.

1. 격자를 2^L * 2^L 크기의 부분 격자로 나눈 뒤 시계 방향으로 돌려줍니다. (rotate 메서드)

2. 파이어스톰을 시전합니다. (firestorm 메서드)

3. 1 ~ 2번 과정을 Q번 반복해줍니다.

4. 격자 내 모든 얼음 크기의 합을 구한 뒤 출력해주고 (getIceCnt 메서드)

5. 가장 큰 덩어리의 크기를 구한 뒤 출력해줍니다. (getLargestComponent 메서드)

 

이 문제에서의 핵심은 1번 알고리즘 즉, 2^L * 2^L 크기의 부분 격자로 나눈 뒤 회전시키는 알고리즘인데 해당 알고리즘은 아래와 같습니다.

 

전체 소스코드

 

 

 

개발환경:Visual Studio 2017

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

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

백준 2953번 나는 요리사다  (0) 2021.05.05
백준 21611번 마법사 상어와 블리자드  (0) 2021.05.03
백준 21638번 SMS from MCHS  (0) 2021.05.02
BOJ 21633번 Bank Transfer  (0) 2021.05.02
백준 21631번 Checkers  (0) 2021.05.02