펭로그

[C++] 삼성 SDS KOITP 순환공간 본문

Study/PS(Algorithm)

[C++] 삼성 SDS KOITP 순환공간

노랑펭귄 2018. 7. 19. 06:30

문제링크 : https://koitp.org/problem/SDS_TEST_SPACE


[삼성 SDS 대학생 알고리즘 특강 사전 테스트 A Type 1번 문제]

1. 맵의 끝부분에서 이동하게 되면 반대편으로 이동된다.

2. X 성분의 값과 Y 성분의 값을 각각 구해서 계산하는 편이 수월하다.

위 두가지 조건을 가지고 간단하게 시뮬레이션을 해보면 쉽게 풀리는 문제다.

빨간색 화살표는 r1과 r2 사이의 거리를 의미하는 것으로 |r2 - r1| 을 abs(r2 - r1) 로 나타낼 수 있다.

파란색 화살표는 맵의 끝에서 r1까지의 거리, 맵의 끝에서 r2까지의 거리를 더한 것으로 그냥 r1 < r2 ? r1 + N - r2 : r2 + N - r1 라고 작성하였다. 두 수를 비교한 다음 스왑해서 계산해도 상관 없으나.. 그게 귀찮아서(?) 그냥 삼항연산자 사용해서 풀었다.

이 컨셉으로 X 방향 이동시 값과 Y 방향 이동시 값을 구하면 단 2줄의 코드 만으로 쉽게 풀 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// KOITP_SDS_Atype_01
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
    // freopen("../input.txt", "r", stdin);
    int T;
    cin >> T;
 
    for (int t = 0; t < T; t++) {
        int N, M, r1, c1, r2, c2;
        cin >> N >> M >> r1 >> c1 >> r2 >> c2;
        int result = 0;
        result += min(abs(r2 - r1), r1 < r2 ? r1 + N - r2 : r2 + N - r1);
        result += min(abs(c2 - c1), c1 < c2 ? c1 + M - c2 : c2 + M - c1);
 
        cout << "#" << t + 1 << " " << result << "\n";
    }
    return 0;
}
 
cs


Comments