본문 바로가기

Algorithm/백준15

백준 2178 미로 탐색 - C++ BFS를 이용한 최단거리 구하기 문제이다. (1,1)에서 시작하여 (N,M)으로 가는 최단거리를 구해야 한다. 현재 위치(i,j)에서 다음 위치(상하좌우)로 갈 수 있을 때 다음 위치의 값을 현재 위치의 값 +1로 하게 되면 최종적으로 (N,M)으로 가는 최소 비용을 구하게 된다. #include #include using namespace std; int A[101][101]; bool check[101][101]; int low[] = {-1, +1, 0, 0}; int col[] = {0, 0, -1, +1}; int N,M; void bfs(int i, int j){ check[i][j] = true; queue q; q.push(make_pair(i,j)); while(!q.empty()){ i.. 2020. 7. 26.
백준 2667 단지번호붙이기 - C++ 접근 그래프 문제라고 생각하면 문제에 쉽게 접근할 수 있다. 핵심 개념은 연결 요소가 무엇인지 DFS 또는 BFS가 무엇인지 알고 있으면 좋다. 각 단지는 서로 연결되어 있지 않기 때문에 각각을 연결 요소라고 생각해도 좋다. 각 집은 어떠한 집 기준으로 상하좌우 중 한 곳에 위치해 있으면 연결되어 있다고 본다. 행렬에서 어떠한 집(A[i][j])에서 상하좌우는 (i,j-1),(i,j+1), (i-1, j), (i+1,j)의 값과 동일하다. DFS #include #include #include #include using namespace std; int A[26][26]; bool check[26][26]; vector vectorCnt; int cnt = 0; void dfs(int i, int j){.. 2020. 7. 26.
백준 1248 맞춰봐 - C++ 음 문제가 엄청 길다. 필요한 내용이 중간 중간 있을까봐 전부 꼼꼼히 읽었지만 마지막 부분만 읽으면 된다.. 규현이는 -10~10까지 알고 있기 때문에 총 21가지 수를 쓸 수 있다(0포함) 만약에 규현이가 A= [-2, 5, -3, 1]이라는 수를 말한다면 이것을 2차원 배열 S에 다음과 같이 표현할 수 있다. 0 1 2 3 0 - + 0 + 1 X + + + 2 X X - - 3 X X X + S[i][j]는 A[i]부터 A[j]까지의 합이 양수면 +, 음수면 -, 0이면 0을 나타낸다. 여기서 i는 j보다 작거나 같아야 한다. i가0이고 j가 1이라 해보자 A[0]+A[1]이 되고 이것의 합은 3이기 때문에 S[0][1]에 +가 저장된다. i가 0이고 j가 2이라면 A[0]+A[1]+A[2]가 되고.. 2020. 7. 23.
백준 2798 블랙잭 - C++ 접근 N 개의 카드 중에서 3개의 카드를 뽑아 그 합이 M과 같거나 근접한 경우를 구해야 한다. 이번 문제는 뽑는 카드의 개수가 3개로 정해져 있어서 3중 for문으로 풀 수도 있지만 재귀문을 사용해도 된다. 성능은 조건만 잘 맞춰주면 3중 for문이 더 빠르긴 하다. N이 5라 할 때 처음 뽑을 수 있는 카드의 수는 5 그다음은 4 다음은 3이다. 카드의 개수는 N에 영향을 받으니 식으로 나타내면 N x (N-1) x (N-2)이다. #include #include using namespace std; int possibleCnt = 3, totalSum=0; int N, M; vector nums; void re(int idx, int start, int sum){ if(idx == possibleC.. 2020. 7. 21.