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
- hackerrank
- 브루트포스
- 동적 계획법
- sw expert academy
- 구현
- Algorithm
- DP
- 시뮬레이션
- BOJ
- 삼성 SDS 대학생 알고리즘 특강
- 해커랭크
- 에라토스테네스의 체
- C++
- BFS
- 알고리즘
- 백트래킹
- 소수
- dfs
- dynamic programming
- 백준
- SWEA
- 다이나믹 프로그래밍
- 잠실
- PS
- 삼성 기출
- 그리디
- koitp
- 스택
- 맛집
- 완전탐색
Archives
- Today
- Total
펭로그
[C++] 삼성 SDS KOITP 순환공간 본문
문제링크 : 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 |
'Study > PS(Algorithm)' 카테고리의 다른 글
[C++] 삼성 SDS KOITP 고장난시계 (0) | 2018.07.19 |
---|---|
[C++] 삼성 SDS KOITP 마지막생존자 (0) | 2018.07.19 |
[C++] 삼성 SDS KOITP 쉬어가는페이지 (1) | 2018.07.19 |
[C++] 백준 BOJ 2839 설탕배달 (0) | 2018.07.13 |
[C++] HackerRank 해커랭크 Roads and Libraries (0) | 2018.04.16 |
Comments