목록분류 전체보기 (78)
몽셀통통의 블로그
최대값과 최솟값을 구할때 항상 삼항 연산자를 사용했었는데c++에서는 algorithm 라이브러리에서 이를 구할 수 있는 함수를 제공한다. 123456789#include #include using namespace std; int main() { cout
코드를 작성하다보면 절대 값을 구해야하는 순간이 종종 온다.항상 삼항 연산자를 사용했었는데 좀더 직관적인 코드 작성을 위해서 abs() 추천 123456789#include using namespace std; int main() { int a = -3; int b = 2; cout
문제https://www.acmicpc.net/problem/2146 풀이DFS+BFS를 모두 사용하는 문제1. DFS를 이용하여 모든 섬을 라벨링한다2. 모든 섬을 queue에 담는다.3. BFS와 거리 공식(|x1-x2|+|y1-y2|)를 이용하여 섬사이의 모든 거리 경우의 수 중 가장 작은 값을 구한다.(섬 중앙에서 연결이 될 경우가 있는데 어차리 최소 거리가 아니므로 상관없음) 코드1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#include #include using name..
문제https://www.acmicpc.net/problem/1987 풀이visit 배열과 방문한 알파벳인지 확인해주는 배열을 사용하여 dfs를 이용하여 방문cnt 변수를 사용하여 횟수를 count 해줌 코드12345678910111213141516171819202122232425262728293031323334353637#include using namespace std; int R, C,ans;char arr[21][21];int visit[21][21];int chknum[30];int dir[4][2] = { {-1,0},{0,1},{1,0},{0,-1} }; void func(int x, int y, int cnt) { if (x = R || y = C) return; for (int i = 0..
scanf 사용시 원치않은 값이 들어가 있다면 버퍼 문제를 살펴 보아야한다. int main() {cin >> R >> C; for (int i = 0; i R >> C; for (int i = 0; i > arr[i][j];}} for (int i = 0; i < R; i++) {for (int j = 0; j < C; j++) {cout
여러 알고리즘 문제에서 완전 탐색으로 걸러지지 않을 것 같은 느낌의 문제가 종종 등장한다.이러한 대부분의 경우는 dfs를 사용하여야 하는데 이 알고리즘을 사용해 보지 않는 사람들은이해하기 어려울 수 있다. 이 알고리즘도 마찬가지로 재귀함수를 토대로 만들어 진다. int visit[MAX] = { 0 }; int n; void function(int i, int j){ if ( n==d ) return; for(int h=0 ; h
일반적으로 탐색과 관련된 재귀적 함수를 짤 때,visit 행렬을 만들어 이전에 방문한 기록이 있는지,있으면 1, 없으면 0으로 두어서 중복 방문을 방지한다 코드 예시 int visit[MAX][MAX] = { 0 }; void recursive(int i, int j){ if (checkvisit[i][j]) return; visit[i][j] = 1; (네 방향으로 이동하는 코드) visit[i][j] = 0; } 코드를 간단하게 작성해 보았다.위와 같이 보통 visit 행렬을 사용하여 방문하였는지 확인하게 되는데맨 처음 if 문을 통해서 해당 위치가 이전에 방문하였는지 체크하고방문하지 않았다면 visit하고 마지막에 다시 0으로 수정해 주어야완전 탐색이 가능하다 모든 코드의 마지막에 다시 0으로 초기..