코드 포스(Code Force) 1055 - A. Metro
문제 유형: 구현
문제 URL: https://codeforces.com/contest/1055/problem/A
일직선 형태로 존재하는 지하철 노선이 있다고 합니다. 노선에는 1부터 N까지 번호가 매겨진 N개의 역이 있습니다. 이 때 밥(Bob)은 1번 역에 살고 있으며, 엘리스(Alice)는 S번 역 근처에 살고 있습니다.
지하철 노선은 두 개의 트랙으로 구성됩니다. 첫 번째 트랙에서는 열차가 역 1에서 역 N으로 이동합니다. 두 번째 트랙에서의 열차는 N부터 1까지 반대 방향으로 이동합니다. 또한 기차는 트랙의 끝에 도달한 순간 운행을 정지한다고 가정합니다.
다만 일부 역에서는 열차가 멈출 수 없는 상황이라고 합니다. 그러므로 몇몇 역은 열차가 그냥 통과하여 지나간다고 가정합니다. 이러한 상황에서 밥(Bob)에게 각 역에 대해서 열차가 멈출 수 있는지, 없는지의 여부가 알려져 있다고 했을 때 밥이 엘리스의 집으로 갈 수 있는지를 출력하면 됩니다.
예를 들어 역이 5개이고, 엘리스가 4번 역 근처에 살고 있다고 해봅시다. 이 때 두 개의 트랙에서 열차가 멈출 수 있는 역들은 1로, 멈출 수 없는 역들을 0으로 표현할 때 다음과 같다고 가정합시다.
첫 번째 트랙: 1 0 0 0 1
두 번째 트랙: 0 1 1 1 1
이 때는 밥이 출발지인 1번 역에서 5번 역으로 이동한 뒤에, 5번 역에서 두 번째 트랙을 타고 4번 역으로 이동하여 엘리스의 집에 도착할 수 있습니다.
이 문제는 정말 간단한 구현 문제입니다. 밥이 항상 1번 역에서 출발한다는 점을 기억하면 됩니다. 그래서 만약 1번 역이 운행되지 않는 상태라면 그 즉시 도달할 수 없음을 알리고 종료하면 됩니다. 이후에는 각 역을 하나씩 확인하며, 첫 번째 트랙에서 운행되는 역일 때만 특정한 조건을 검사하면 됩니다. 여기서 조건은 바로 해당 역이 엘리스가 있는 역인지 혹은 두 번째 트랙으로 이동하여 반대 방향으로 이동하여 엘리스가 있는 역으로 갈 수 있는지를 의미합니다.
따라서 간단한 난이도의 단순 구현 문제라고 볼 수 있습니다.
※ 입출력 예시 ※
5 3
1 1 1 1 1
1 1 1 1 1
YES
5 4
1 0 0 0 1
0 1 1 1 1
YES
5 2
0 1 1 1 1
1 1 1 1 1
NO
※ 정답 소스코드 ※
(컴파일 환경: GNU G++11 5.1.0)
#include <iostream> using namespace std; int a[1001]; int b[1001]; int main(void) { int n, m; cin >> n >> m; for(int i = 1; i <= n; i++) { cin >> a[i]; } for(int i = 1; i <= n; i++) { cin >> b[i]; } if(a[1] == 0) { cout << "NO"; return 0; } for(int i = 1; i <= n; i++) { if(a[i] == 1) { if(i == m || (b[i] == 1 && b[m] == 1 && m < i)) { cout << "YES"; return 0; } } } cout << "NO"; return 0; }
'알고리즘 대회' 카테고리의 다른 글
코드 포스(Code Force) 1055 - C. Lucky Days (0) | 2018.11.12 |
---|---|
코드 포스(Code Force) 1055 - B. Alice and Hairdresser (0) | 2018.11.12 |
코드 포스(Code Force) 1075 - C. The Tower is Going Home (0) | 2018.11.12 |
코드 포스(Code Force) 915 - C. Permute Digits (0) | 2018.11.12 |
코드 포스(Code Force) 1075 - B. Taxi drivers and Lyft (0) | 2018.11.12 |