티스토리 뷰
문제풀이
비상연락망과 연락을 시작하는 당번에 대한 정보가 주어질 때, 가장 나중에 연락을 받게 되는 사람 중 번호가 가장 큰 사람을 구하는 문제다.
위 그림은 비상연락망을 나타낸 그림이고 각 원은 개개인을 의미하며, 원 안의 숫자는 그 사람의 번호이다.
빨간원은 연락을 시작하는 당번을 의미하고 화살표는 연락이 가능한 방향을 의미한다.
가장 나중에 연락을 받게 되는 사람을 찾기 위해서 BFS를 통해 depth 배열에 연락받는 순서를 저장해주었다.
그림을 보면서 설명을 해보겠다!
먼저 연락을 시작하는 당번은 1로 둔다.
비상연락망이 가동되면 2번은 연락가능한 7번과 15번에게 동시에 연락을 취한다.
7번과 15번의 depth는 2가 된다.
그 다음엔 7번이 1번에게, 15번이 5번에게 연락을 취할 것이다.
그러면 1번과 5번의 depth는 3이 된다.
그 다음 1번이 8번과 17번에게 동시에 연락하고, 이와 동시에 4번은 10번에게 연락한다.
7번과 2번의 경우는 depth가 0이 아니므로, 즉 이미 연락을 받은 상태이기 때문에 다시 연락하지 않는다.
8번, 17번, 10번의 depth는 4가 될 것이다.
더 이상 연락할 수 있는 사람이 없으므로 여기서 연락이 끝나게 된다.
이제 depth 배열에서 값이 가장 큰 인덱스들 중 제일 큰 인덱스를 찾으면 17번을 구할 수 있다.
C++ 코드
'Problem Solving > SWEA' 카테고리의 다른 글
[SWEA 1232] 사칙연산 C++ (0) | 2021.08.02 |
---|---|
[SWEA 1231] 중위순회 C++/Java (0) | 2021.08.02 |
[SWEA 1226] 미로1 C++/Java (0) | 2021.07.29 |
[SWEA 1225] 암호생성기 C++/Java (0) | 2021.07.29 |
[SWEA 1224] 계산기3 C++ (0) | 2021.07.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알고리즘
- 위상 정렬
- 구현
- Two Pointer
- 정렬
- 분할 정복
- BOJ
- programmers
- dfs
- 자바
- 투 포인터
- 스택
- SWEA
- 브루트포스
- 두 포인터
- SW Expert Academy
- 트리
- C++
- Java
- BFS
- 프로그래머스
- 그래프
- 재귀
- 백준
- 배열
- 문자열
- Kotlin
- 큐
- algorithm
- 이분 탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함