티스토리 뷰

반응형

https://www.acmicpc.net/problem/20057

 

20057번: 마법사 상어와 토네이도

마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을

www.acmicpc.net

 

난이도 : 골드 4

 

바람이 이동하는 것은 재귀를 이용하여 풀었습니다.

바람이 2번 꺾일 때마다 걸음 수가 1씩 증가하는 것을 규칙으로 움직입니다.

실수하지 않기 위해 wind 메소드의 길이가 매우 길어졌습니다. 가독성을 포기한다면 길이를 줄일 수 있겠네요.

칸마다 이동하며 좌표 값이 정상 범위를 벗어난다면 밖으로 떨어진 것이니 그때마다 out에 더해줬습니다.


전역 변수

int n = 맵의 크기

int map[][] = 문제에서 주어진 값

int dx[], dy[] = 좌표를 이동하기 위한 배열

long out = 밖으로 떨어진 모래의 양

 

메소드

void main

입력을 받고 중앙부터 바람을 일으킵니다.

(tornado 호출)

 

void tornado

바람이 이동하는데 문제에서 요청대로 매 칸 모래를 이동시켜줍니다.

걸어가야 하는 길의 길이를 size, 걸어온 칸 count, 바람이 꺾인 횟수 corner를 이용하였습니다.

(tornado 호출)

 

void wind

문제에서 요구한 대로 모래를 뿌립니다. 현재 방향이 0과 2, 1과 3일 때는 같은 동작을 합니다. 물론 가독성을 포기하고 더 줄일 수 있습니다.

좌표값이 범위를 벗어나면 밖이므로 out에 더해줍니다.

(check 호출)

 

boolean check

파라미터로 받은 좌표값들이 정상 범위인지 확인합니다.

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함