본문 바로가기

알고리즘

[삼성 sw 기출] - 마법사 상어와 파이어볼

www.acmicpc.net/problem/20056

 

20056번: 마법사 상어와 파이어볼

첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치

www.acmicpc.net

문제를 풀면서 많이 헤매었는데, 주의해야 할 것을 위주로 작성해봐야겠다.

문제 풀이 방식

문제 풀이 방식은 사실 특별할 것은 없는데, 아래의 문제 설명처럼 파이어볼을 이동하고 나누는 과정을 그대로 구현하면 된다.

 

주의할 점

이 문제를 쉽게 접근하기 위해서는 ArrayList를 2차원 배열로 선언하는 것이 중요하다는 것을 인지했으면 더 빨리 풀 수 있었을 것 같다.

2차원의 List 배열을 생성하여 주고 이 2차원 배열의 리스트에 fireball을 담을 것이다. List를 선언했다면 반복문을 통해 초기화시켜주는 것을 꼭 잊지 말자.

static List<fire>[][] map = new ArrayList[n+1][n+1];

for(int i=1; i<=n; i++){
    for(int j=1; j<=n; j++){
        map[i][j] = new ArrayList<>();
 	}
 }

그다음으로 주의해야 하는 것은 파이어 볼이 이동할 때, 선언한 맵이 연결되어 있다는 것이다. 그러므로 인덱스를 초과했을 때 맵이 연결될 수 있도록 반드시 신경 써줘야 한다.

소스코드