Algorithm 20

백준[2667] 단지번호붙이기

dfs를 이용하면 쉽게 풀지만 저장하는 배열을 동적할당하면 메모리오류가 발생한다..; □ 소스 코드 #include int inputList[25][25]{0}; int aptCntList[25]{0};//단지 별 아파트 개수 int aptCnt; // 단지 개수 int apN; bool dfs2667(int x,int y){ if(x=apN) return false; if(inputList[x][y] == 1){ inputList[x][y] = 0; aptCntList[aptCnt]++; dfs2667(x+1, y); dfs2667(x-1, y); dfs2667(x, y+1); dfs2667(x, y-1); return true; } return false; } void countNumApartment..

백준[24445] 알고리즘 수업 - 너비 우선 탐색 2

앞에서 풀었던 bfs 문제에서 내림차순으로 변경되었다. #include int bfsN2,bfsM2,bfsR2; vector bfsList2[100001]; bool bfsVisited2[100001]; queue bfsQueue2; int* bfsRes2; void bfs24445(int v){ int bCnt2 = 1; bfsVisited2[v] = true; bfsRes2[v] = bCnt2; bfsQueue2.push(v); while(!bfsQueue2.empty()){ int front = bfsQueue2.front(); bfsQueue2.pop(); for(int i=0;ib; } void BFS2(){ scanf("%d%d%d",&bfsN2,&bfsM2,&bfsR2); bfsRes2 = ..

백준[24444] 알고리즘 수업 - 너비 우선 탐색 1

bfs를 이용한 문제이다. 앞에서 풀었던 dfs와 같은 문제지만 bfs로 응용을 살짝 하면 손쉽게 풀 수 있다. 재귀함수로 인한 메모리 오류를 걱정안해도 좋다..ㅎ □ 소스 코드 #include int bfsN,bfsM,bfsR; vector bfsList1[100001]; bool bfsVisited[100001]; queue bfsQueue; int* bfsRes; void bfs24444(int v){ int bfsCnt = 1; bfsVisited[v] = true; bfsRes[v] = bfsCnt; bfsQueue.push(v); while(!bfsQueue.empty()){ int front = bfsQueue.front(); bfsQueue.pop(); for(int i=0;i

백준[24480] 알고리즘 수업 - 깊이 우선 탐색 2

24479번 문제의 오름차순에서 내림차순으로 변경된 것 밖에 없다. #include int *dfsRes; int dfsN2,dfsM2,dfsR2; vector dfsList2[100001]; int cnt2 = 0; bool dfsVisited2[100001]{false}; void dfs24480(int v){ if(dfsVisited2[v]) return; dfsVisited2[v] = true; cnt2++; dfsRes[v] = cnt2; for(int i=0;ib; } void DFS2(){ scanf("%d%d%d",&dfsN2,&dfsM2,&dfsR2); dfsRes = new int[dfsN2+1]; for(int i=0;i

백준[24479] 알고리즘 수업 - 깊이 우선 탐색 1

DFS를 응용한 첫 문제인데.. 실전으로 처음 접하다 보니 너무 어렵다;; 재귀함수가 100,000번 이상 중첩되다 보면 메모리 오류가 나기도 하고 cout, cin을 사용하면 대량 데이터를 입력받다 보니 시간초과가 뜨기도 한다. 여러 가지로 너무 힘든 문제다... #include int dfsN, dfsM, dfsR; bool* dfsResList; vector dfsList[100001]; int dfsRes24479[100001]; int cnt = 0; void dfs24479(int v){ if(dfsResList[v]) return; dfsResList[v] = true; cnt++; dfsRes24479[v] = cnt; for(int i=0;i

미로 탈출

'이것이 코딩테스트다 with 파이썬' 실전 문제 5-4입니다. 미로나 이동하는 문제는 BFS를 많이 사용하는 것 같다. 아직 미숙해서... 문제가 너무 어렵다ㅠ □ 소스 코드 #include int N,M; int** mazeInput; int mazeBFS(int x, int y){ queue mazeQueue; mazeQueue.push({x,y}); int mvX[] = {-1,0,1,0}; //상,좌,하,우 int mvY[] = {0,-1,0,1}; while(!mazeQueue.empty()){ x = mazeQueue.front().first; y = mazeQueue.front().second; mazeQueue.pop(); for(int i=0;i= N ) continue; if(maze..

음료수 얼려 먹기

'이것이 코딩테스드다 with 파이썬' 실전문제 5-3번 음료수 얼려 먹기 문제입니다. DFS를 사용하여 해결하는 문제입니다. □ 소스 코드 #include int n,m; int** input; bool dfs(int x,int y){ // 범위를 벗어나는 경우 false 리턴 if(x=m ) return false; //상하좌우를 탐색하고 찾은 경우 true 리턴 if(input[x][y] == 0){ input[x][y] = 1; dfs(x-1, y); dfs(x+1, y); dfs(x, y-1); dfs(x, y+1); return true; } return false; } void frozenJuice(){ cin>>n>>m; input = new int* [n]; for(int i=0;i