문제 링크입니다: https://koitp.org/problem/SDS_TEST_SPACE/read/
별도의 알고리즘을 요구하지 않는 쉬운 문제였습니다.
총 9가지의 경우를 고려해줘야합니다.
1. S에서 E로 바로 가는 경우
2. S의 x 좌표가 0을 지나 M-1로 가는 경우
3. S의 x 좌표가 M-1을 지나 0으로 가는 경우
4. S의 y 좌표가 0을 지나 N-1로 가는 경우
5. S의 y 좌표가 N-1을 지나 0으로 가는 경우
6. 2번 + 4번
7. 2번 + 5번
8. 3번 + 4번
9. 3번 + 5번
#include <iostream>
#include <algorithm>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0); //cin 속도 향상
int test_case;
cin >> test_case;
for (int i = 1; i <= test_case; i++)
{
int N, M;
pair<int, int> start;
pair<int, int> finish;
cin >> N >> M;
cin >> start.first >> start.second;
cin >> finish.first >> finish.second;
int result;
//그냥 좌표 그대로
int candidate1 = abs(start.first - finish.first) + abs(start.second - finish.second);
//y N-1 -> 0
int candidate2 = (N - start.first) + finish.first + abs(start.second - finish.second);
result = min(candidate1, candidate2);
//y 0 -> N-1
int candidate3 = (start.first + 1) + abs(finish.first - (N - 1)) + abs(start.second - finish.second);
result = min(result, candidate3);
//x M-1 -> 0
int candidate4 = abs(start.first - finish.first) + (M - start.second) + finish.second;
result = min(result, candidate4);
//x 0 -> M-1
int candidate5 = abs(start.first - finish.first) + (start.second + 1) + abs(finish.second - (M - 1));
result = min(result, candidate5);
//y N-1 -> 0
//x M-1 -> 0
int candidate6 = (N - start.first) + finish.first + (M - start.second) + finish.second;
result = min(result, candidate6);
//y N-1 -> 0
//x 0 -> M-1
int candidate7 = (N - start.first) + finish.first + (start.second + 1) + abs(finish.second - (M - 1));
result = min(result, candidate7);
//y 0 -> N-1
//x M-1 -> 0
int candidate8 = (start.first + 1) + abs(finish.first - (N - 1)) + (M - start.second) + finish.second;
result = min(result, candidate8);
//y 0 -> N-1
//x 0 -> M-1
int candidate9 = (start.first + 1) + abs(finish.first - (N - 1)) + (start.second + 1) + abs(finish.second - (M - 1));
result = min(result, candidate9);
cout << "#" << i << " " << result << "\n";
}
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > koitp' 카테고리의 다른 글
koitp SDS_TEST_BIGINT 큰수만들기 (0) | 2018.07.28 |
---|---|
koitp SDS_TEST_TREASURE 보물찾기 (0) | 2018.07.28 |
koitp SDS_TEST_PAGE 쉬어가는페이지 (0) | 2018.07.28 |
koitp SDS_TEST_SURVIVOR 마지막생존자 (0) | 2018.07.28 |
koitp SDS_TEST_CONSULTING 전화상담 (0) | 2018.07.28 |