728x90
반응형
https://www.acmicpc.net/problem/15685
#include<stdio.h>
#include<iostream>
#include<string>
#include<string.h>
#include<vector>
using namespace std;
#define MAP_SIZE 101
int N;
int map[MAP_SIZE+4][MAP_SIZE+4];
int dy[] = { 0,-1,0,1 };
int dx[] = { 1,0,-1,0 };
struct Data {
int y, x, dir, age;
};
void print(string name, int idx, vector<int> &dragonDir) {
cout << name<<endl;
for (int i = 0; i < dragonDir.size(); i++) {
cout << dragonDir[i] << " ";
}
cout << endl;
}
int main(void) {
scanf("%d", &N);//드래곤 커브 개수
for (int i = 0; i < N; i++) {
int y, x, dir, age;
scanf("%d %d %d %d", &x, &y, &dir, &age);//y축, x축, 방향 , 세대
vector<int>dragonDir;//드래곤 경로 저장
dragonDir.push_back(dir);
for (int age_Idx = 0; age_Idx < age; age_Idx++) {// 세대 만큼 돌리기
for (int k = dragonDir.size() - 1; k >= 0; k--) {//드래곤 경로 끝에서부터 시계방향 90 회전
dragonDir.push_back((dragonDir[k]+1) % 4);
}
//print("드래곤 경로", age_Idx + 1,dragonDir);
}
//드래곤 경로 배열에 찍기
map[y][x] = 1;
for (int k = 0; k < dragonDir.size(); k++) {
map[y + dy[dragonDir[k]]][x + dx[dragonDir[k]]] = 1;
y += dy[dragonDir[k]]; x += dx[dragonDir[k]];
}
}
//1x1 정사각형 찾기
int ret = 0;//정사각형 개수 저장
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
if (map[i][j] == 1 && map[i][j + 1] == 1
&& map[i + 1][j] == 1 && map[i + 1][j + 1] == 1) {
ret++;
}
}
}
cout << ret << endl;// 정사각형 개수 출력
return 0;
}
이문제는 경로를 한번에 다저장을 하고 저장한 경로를 따로 배열에 저장하는 포인트만 알면 쉬운 문제입니다.
물론 드래곤 커브의 경로를 어떤식으로 저장하는지도 알아야합니다.
그리고 여기서 다들 틀렸을수 있는데 x축과 y축을 잘 생각해서 써야하는것입니다.
물론 문제를 잘읽으면 되지만 분명 문제를 앞으로 풀다가 보면 분명 예제는 다 맞는데 왜 문제가 틀리다고 하지 하면
거의 y ,x를 반대로 한경우가 있으니 항상 주의해주세요
저는 좀 바보 같은 실수를 했습니다. 마지막에 1x1 정사각형 판별할때 범위를 좀 다 검사가 안되게 되어있더라구요
그런 실수 여러분들은 하지 마세요 !!!!다같이 알고리즘 격파해 봅시다.
728x90
반응형
'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글
15686 치킨배달 (0) | 2020.07.27 |
---|---|
프로그래머스 다리를 지나는 트럭 (0) | 2020.07.25 |
프로그래머스 카펫 (0) | 2020.07.23 |
15683 감시 (0) | 2020.07.23 |
프로그래머스 숫자 야구 (0) | 2020.07.22 |
댓글