일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SQL
- 삼성
- sw expert
- englishbook
- 코테
- 쉬운 알고리즘 문제
- dfs
- 완전탐색
- 알고리즘
- D4
- BFS
- 코테 준비
- 원서
- 알고리즘 문제
- PyQt
- swexpertacademy
- 코딩테스트
- STUDYENGLISH
- sw expert academy
- nightroutine
- 직무면접
- MySQL
- English
- 백준
- readingbook
- 원서읽자
- 프로그래머스
- the midnight library
- 원서읽기
- 코테 대비
- Today
- Total
목록알고리즘 (77)
시나브로
Solution 데이터를 받아 map에 저장합니다 (0.0)으로 dfs함수를 호출합니다. 문제에서 무조건 0,0은 치즈가 없다고 하였기에 이점을 이용하여 공기에 접촉된 치즈를 찾습니다. 찾은 치즈는 list 큐에 저장합니다. 여기서 포인트는 각 치즈의 시간을 알아야 된다는 것입니다. 저는 이를 해결하기위해 자료구조 큐와 (1110,1110)이라는 값을 넣어줬습니다. => 큐를 이용하면 순차적으로 pop이 되어 순서를 지킬 수 있습니다. 한번 dfs함수를 돌면서 들어온 값들은 동일한 시간을 가지고 있기에 이후 값과 섞이지 않고 관리할 수 있습니다. 하지만, 이렇게 한다고 해도 시간이 변경되는 기준점을 찾을 수 없습니다. 그래서 저는 임의값 (1110,1110)을 넣어 시간이 변경되는 시점을 체크하였습니다...
단순 완전탐색보다는 조금 힘든 문제인 것 같다. Solution 먼저 데이터를 받아 map를 만든다. 여기서 min_high와 max_high를 찾는다. 이는 처음 물높이를 설정할 때 이용한다. 모든 점을 우선순위 큐에 넣어서 오름차순 정렬을 한다. => 여기서 다른 구조를 사용해도 된다. 나는 벡터를 쓸려고하다가 큐가 편할 것 같아서 큐를 사용했는데 정렬이 안되서 할 수 없이 우선순위 큐를 이용했다. 그러므로 아무 자료구조를 사용해도 좋다. 단, 구조체 정렬이 가능해야된다는 점을 유의하자. 자료량이 계속 들어오는게 아니라 자료량의 크기도 정해져있기 때문에배열도 상관없다. 높이 가장 작은 곳을 찾아 물 높이가 min_high일 때, 잠기는 지 확인하다. 잠긴다면, 잠겼다는 표시로 0으로 바꿔준다. 만약 ..
이 문제는 전형적인 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..