일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- englishbook
- 알고리즘 문제
- 코테 대비
- sw expert
- the midnight library
- dfs
- swexpertacademy
- 코테
- 삼성
- SQL
- 완전탐색
- PyQt
- 백준
- 코테 준비
- 직무면접
- English
- 알고리즘
- 원서읽자
- MySQL
- readingbook
- nightroutine
- D4
- 원서
- 원서읽기
- 프로그래머스
- BFS
- 쉬운 알고리즘 문제
- sw expert academy
- 코딩테스트
- STUDYENGLISH
- Today
- Total
목록알고리즘 (105)
시나브로
이 문제는 전형적인 DFS/BFS 완전탐색 문제이다. Solution 값을 입력 받는다. 여기서 값이 1인 인덱스를 벡터 stack에 입력한다. 벡터 stack이 빌때까지 while문을 돌면서 dfs 함수를 호출한다. 호출할 때는 새로운 단지를 발견한 것이기에 answer함수에 새로운 단지를 찾았다는 뜻으로 push_back으로 값을 넣어준다. dfs함수에서는 4방향을 보며 1일 경우, 재귀호출을 해준다. => 여기서 유의점은 범위체크이다. 인덱스가 배열을 범위를 넘어서면 무조건 오류가 나기때문에 귀찮더라도 범위체크를 해줘야한다. 재귀호출하면서 집의 갯수를 세야된다. 그렇기에 새로운 집에 방문할때마다 answer의 마지막 요소에 +1를 해준다. 여기서 왜 마지막 요소인가하면, 동시에 여러단지를 검색하지않..
조합을 이용하여 팀을 나눈다. Solution 조합을 이용해 팀을 나눈다 팀별로 연산을 한다. #include #include #include #include #include #include using namespace std; #define INF 1000000000 int main(void) { freopen("inp.inp", "r", stdin); freopen("out.out", "w", stdout); vector map; vector person; int amount = 0; cin >> amount; for (int i = 0; i < amount; i++) { vector a; map.push_back(a); person.push_back(i); for (int j = 0; j < amo..
전형적인 전체탐색 문제이다. Solution 재귀함수를 통해 벽을 세울 위치를 3개를 탐색한다. 3개가 탐색되면, 바이러스를 퍼지는 것을 시뮬레이션 돌려서 완전공간을 확인한다. Key Point 상관은 없지만, 시간을 줄이기 위해서 check함수로 통해 중복연산을 줄였다. 하지만, 이를 하지 않아도 성공할 수 있다. #include #include #include #include #include #include using namespace std; #define INF 10000000 typedef struct A { int i, j; }; vector map; int n, m; queue list; int wall_number = 0; int dx[] = { -1,0,1,0 }; int dy[] = {..
완전 쉬운 완전탐색 문제입니다. 처음 편하게 시도하기에 적합한 문제인듯합니다. Solution 재귀호출을 하면서 상담을 하는 경우와 안하는 경우 모두 탐색을 해줍니다. 그중에 max값을 선택합니다. Key Point 완전탐색 #include #include #include #include #include #include using namespace std; #define INF 10000000 int max_value = 0; int n = 0; int list[16][2] = { 0 }; void dfs(int value,int time) { if (time+1 > n) { if (value > max_value) max_value = value; return; } if (list[time][0] !=..