250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 공대생 자소서
- 대중음악화성
- 드럼Tab악보
- 코드차용
- ableton live 12
- 모드코드
- 코딩테스트
- Java
- 삼성SW Expert Academy
- 마법사상어와 블리자드
- 삼성전자
- 음정이론
- SW 직군
- DP
- mode chord
- 코테
- 무료 악보 프로그램
- 코드트리
- 삼성기출
- code tree
- syncroom
- 음계구조
- 취준
- 음악작곡기초
- 평행조
- 화음분석
- 스케일분석
- 모달진행
- 알고리즘
- 화성학응용
Archives
- Today
- Total
Code Beat
[삼성 코테 기출] 21610 - 마법사 상어와 비바라기 본문
728x90
8방향으로 움직이는 map에서의 단순 구현 문제
#include <iostream>
#include <vector>
#include <deque>
#include <algorithm>
using namespace std;
int map[50][50];
int visit[50][50];
int N, M;
vector< pair<int, int> > clouds;
int dr[8] = { 0,-1,-1,-1,0,1,1,1 };
int dc[8] = { -1,-1, 0, 1, 1, 1, 0 , -1 };
void new_cloud() {
clouds.clear();
for (int r = 0; r < N; r++) {
for (int c = 0; c < N; c++) {
if (visit[r][c] == 1) continue;
if (map[r][c] >= 2) {
clouds.push_back(make_pair(r, c));
map[r][c] -= 2;
}
}
}
}
void water_bug() {
vector< pair<int, int> > add;
int size = clouds.size();
for(int i = 0; i < size; i++){
int r = clouds[i].first;
int c = clouds[i].second;
for (int dir = 1; dir < 8; dir+=2) {
int nr = r + dr[dir];
int nc = c + dc[dir];
if (nr < 0 || nc < 0 || nr > N - 1 || nc > N - 1) continue;
if (map[nr][nc] == 0) continue;
add.push_back(make_pair(r, c));
}
}
size = add.size();
for (int i = 0; i < size; i++) {
map[add[i].first][add[i].second]++;
}
}
void move_and_rain(int d, int s) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
visit[i][j] = 0;
}
}
int size = clouds.size();
for (int i = 0; i < size; i++) {
int r = clouds[i].first = (clouds[i].first + dr[d] * s + (N * 50)) % N;
int c = clouds[i].second = (clouds[i].second + dc[d] * s + (N * 50)) % N;
visit[r][c] = 1;
map[r][c] += 1;
}
}
int main(void) {
cin >> N >> M;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> map[i][j];
}
}
clouds.push_back(make_pair(N - 1, 0));
clouds.push_back(make_pair(N - 1, 1));
clouds.push_back(make_pair(N - 2, 0));
clouds.push_back(make_pair(N - 2, 1));
int d, s;
for (int i = 0; i < M; i++) {
cin >> d >> s;
move_and_rain(d - 1, s);
water_bug();
new_cloud();
}
int answer = 0;
for (int r = 0; r < N; r++) {
for (int c = 0; c < N; c++) {
answer += map[r][c];
}
}
cout << answer << "\n";
return 0;
}
728x90
'Code > 백준' 카테고리의 다른 글
[삼성 코테 기출] 21611 - 마법사 상어와 블리자드 (0) | 2024.03.24 |
---|