반응형
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 |
Tags
- 소프티어
- 처우산정
- 매개변수탐색
- 처우협의
- 퇴사통보
- BFS
- 6987
- 기술면접
- incr
- Docker
- OFFSET
- @P0
- Kafka
- BOJ
- msSQL
- 파라메트릭
- dfs
- compose
- 오퍼레터
- 물채우기
- 연결요소
- boj #19237 #어른 상어
- 13908
- 성적평가
- 백준
- 경력
- upper_bound
- softeer
- 백트래킹
- 이분탐색
Archives
- Today
- Total
기술 블로그
16724번 피리 부는 사나이 본문
728x90
반응형
한양대 ERICA
Zero One Algorithm Contest 2018 문제이다.(https://www.acmicpc.net/category/detail/1981)
개인적으로 허를 찌르는 문제들이 많았다!
모르고, 못 푸는 문제가 거의 다...
좋은 문제와 좋은 해설을 제공해주신 분들에게 무척 감사하다.
문제 : https://www.acmicpc.net/problem/16724
대회 해설 : http://hellogaon.tistory.com/66
문제의
성우가 설정한 방향 지도가 주어졌을 때 재훈이를 도와서 영과일 회원들이 지도 어느 구역에 있더라도 성우가 피리를 불 때 ‘SAFE ZONE’에 들어갈 수 있게 하는 ‘SAFE ZONE’의 최소 개수를 출력하는 프로그램을 작성하시오.
이 문장을 보고, '사이클 개수'를 구하는 것을 짐작할 수 있다.
다만, 완전히 도너츠 모양의 O 사이클이 아니라. 6 모양의 사이클도 될 수 있다.
그래서,
처음 시작할 때부터, 행과 열의 좌표를 vector에 담아서,
매번 새로운 행과 열을 받아들일 때, 그 새로운 행과 열이 vector에 있는지 검사한다.(사이클 검사)
입력 예시)
3 4
DLLL
DLLL
RRRU
답 : 1
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include <iostream> #include <queue> #include <stack> #include <cstdio> #include <vector> #include <cstring> #include <string> #include <math.h> #include <algorithm> #include <map> using namespace std; bool visit[1001][1001] = { false, }; bool stop = false; char Map[1001][1001]; int N = 0, M = 0; int y = 0, x = 0; int result = 0; vector<pair<int, int> > v; bool Chk(int r, int c) { for (int i = 0; i < v.size(); i++) if (r == v.at(i).first && c == v.at(i).second) return true; return false; } void DFS(int r, int c) { if (stop) return; visit[r][c] = true; v.push_back({ r, c }); int nr = r; int nc = c; if (Map[r][c] == 'U') --nr; else if (Map[r][c] == 'D') ++nr; else if (Map[r][c] == 'L') --nc; else if (Map[r][c] == 'R') ++nc; if (Chk(nr, nc)) { stop = true; ++result; return; } if (!visit[nr][nc]) DFS(nr, nc); } int main(void) { scanf("%d %d", &N, &M); for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) cin >> Map[i][j]; for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) { stop = false; if (!v.empty()) v.clear(); if(!visit[i][j]) DFS(i, j); } printf("%d\n", result); return 0; } | cs |
728x90
반응형
'알고리즘 문제 > BOJ' 카테고리의 다른 글
2858번 기숙사 바닥 (0) | 2019.01.01 |
---|---|
4195번 친구 네트워크 (0) | 2019.01.01 |
16724번 원영이는 ZOAC과 영원하고 싶다 (0) | 2018.12.31 |
4179번 불! (0) | 2018.12.30 |
1019번 책 페이지 (0) | 2018.12.29 |