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 |
Tags
- 수학
- 백트래킹
- 그래프
- 그리디 알고리즘
- XR Interaction Toolkit
- Unreal Engine 5
- 다이나믹 프로그래밍
- VR
- 재귀
- 백준
- 구현
- 누적 합
- BFS
- Team Fortress 2
- 트리
- ue5
- 브루트포스
- 유니온 파인드
- 자료구조
- 다익스트라
- 시뮬레이션
- 스택
- 정렬
- 우선순위 큐
- 알고리즘
- 유니티
- 문자열
- c++
- DFS
- 투 포인터
Archives
- Today
- Total
1일1알
백준 2564번 경비원 C++ 본문
경비원의 위치가 주어지고, 상점들의 위치가 주어졌을 때, 경비원의 위치에서 상점의 위치까지의 최솟값들을 구해서 더하는 문제이다.
내가 해결한 방법은 구조체를 이용하여 입력받은 상점들의 위치를 저장하고 만약 위치가 1이나 2 (북쪽, 남쪽) 이면 왼쪽 꼭짓점까지의 거리와 오른쪽 꼭짓점까지의 거리를 저장하고, 위치가 3이나 4(서쪽, 동쪽) 이면 위쪽 꼭짓점까지의 거리와 아래쪽 꼭짓점까지의 거리를 저장하였다.
그리고 상점의 위치정보를 저장한 구조체를 벡터에 담고 벡터를 하나씩 순환하면서 각각의 상황마다 경비원과 상점의 거리의 최솟값을 구해서 더해주면서 문제를 해결하였다.
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
using namespace std;
typedef long long ll;
int x, y;
struct store_info {
store_info(int lotation, int dist) {
this->lotation = lotation;
dist_left = 0;
dist_right = 0;
dist_up = 0;
dist_down = 0;
if (lotation <= 2) {
dist_left = dist;
dist_right = x - dist;
}
else {
dist_up = dist;
dist_down = y - dist;
}
}
int lotation;
int dist_left;
int dist_right;
int dist_up;
int dist_down;
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t, lot, dis;
cin >> x >> y >> t;
vector<store_info> v;
while (t--) {
cin >> lot >> dis;
v.push_back(store_info(lot, dis));
}
int mylot, mydis;
cin >> mylot >> mydis;
int sum = 0;
for (auto a : v) {
int dist1 = 0;
int dist2 = 0;
int mindist = 0;
if (mylot <= 2) {
if (a.lotation <= 2) {
if (mylot == a.lotation) {
mindist = abs(mydis - a.dist_left);
}
else {
dist1 = mydis + a.dist_left + y;
dist2 = x - mydis + a.dist_right + y;
mindist = min(dist1, dist2);
}
}
else {
if (a.lotation == 3) {
if (mylot == 1) {
mindist = mydis + a.dist_up;
}
else {
mindist = mydis + a.dist_down;
}
}
else {
if (mylot == 1) {
mindist = (x - mydis) + a.dist_up;
}
else {
mindist = (x - mydis) + a.dist_down;
}
}
}
}
else {
if (a.lotation <= 2) {
if (a.lotation == 1) {
if (mylot == 3) {
mindist = mydis + a.dist_left;
}
else {
mindist = mydis + a.dist_right;
}
}
else {
if (mylot == 3) {
mindist = (y - mydis) + a.dist_left;
}
else {
mindist = (y - mydis) + a.dist_right;
}
}
}
else {
if (mylot == a.lotation) {
if (mylot == a.lotation) {
mindist = abs(mydis - a.dist_up);
}
}
else {
dist1 = mydis + a.dist_up + x;
dist2 = (y - mydis) + a.dist_down + x;
mindist = min(dist1, dist2);
}
}
}
sum += mindist;
}
cout << sum;
};
'알고리즘' 카테고리의 다른 글
백준 1254번 팰린드롬 만들기 C++ (0) | 2021.11.14 |
---|---|
백준 2961번 도영이가 만든 맛있는 음식 C++ (0) | 2021.11.13 |
백준 2589번 보물섬 C++ (0) | 2021.11.11 |
백준 4358번 생태학 C++ (0) | 2021.11.10 |
백준 11497 통나무 건너뛰기 C++ (0) | 2021.11.09 |