알고리즘(51)
-
프로그래머스 연속 부분 수열 합의 개수 C++
완전 탐색으로 구현 가능한 문제이다. 자세한 것은 주석 보세요 #include #include #include using namespace std; int ele[10000001]; int solution(vector elements) { unsigned long long answer = 0; for (int i=1;i
2023.09.18 -
프로그래머스 모음사전 C++ dfs
#include #include #include using namespace std; char alpha[5] = {'A', 'E', 'I', 'O', 'U'}; int answer, cnt; void dfs(string s, string word){ if (s==word){ answer=cnt; return; } if (s.length()>=5){ return; } for (int i=0;i
2023.09.17 -
프로그래머스 리코쳇 로봇 C++
#include #include #include #include using namespace std; int visited[101][101]; int stx, sty; int row_length, col_length; int dx[4]= {-1, 1, 0, 0}; int dy[4]={0, 0, -1, 1}; int bfs(vector board){ queue q; visited[sty][stx]=0; q.push({stx, sty}); while (!q.empty()){ int x = q.front().first; int y = q.front().second; q.pop(); if (board[y][x]=='G'){ return visited[y][x]; } for (int i=0;i=0 &&nx+dx[..
2023.09.17 -
백준 14503 C++ 로봇청소기
문제는 단순 구현 문제였다. 예제 2번에 대한 답이 계속해서 나오지 않아 고민했는데, '바라보는 방향의 뒤쪽 칸이 벽이면 후진할 수 없다' 라는 것을 기억해야한다. 즉 청소한 칸의 경우는 후진할 수 있다. 이 부분을 없애니 바로 맞았다. #include #include using namespace std; int N, M, cnt; int room[51][51]; int dx[4] = { 0, 1, 0, -1 }; int dy[4] = { -1, 0, 1, 0 }; int x, y, dir; int move(void) { int nx, ny; if (room[y][x] == 0) { // 청소가 되어 있지 않으면 청소한다 room[y][x] = 2; cnt++; return 1; } for (int i ..
2023.09.15 -
백준 14500 테트로미노 c++ (dfs)
풀이 dfs 문제이다. 테트로미노들은 모두 4칸으로 이루어져있고, 사실상 dfs depth를 4로 했을 때 갈 수 있는 최대값이 도형들의 모양이 되는 것을 확인할 수 있다. 따라서 dfs를 depth 4로 해서 최대값을 구현하면 된다. 배열에 있는 모든 점에 대해서 수행을 해야한다. 그리고 ㅗ 모양에 대해서는 완전 탐색으로 구현하면 된다 for (int i = 0;i < N;i++) { for (int j = 0;j < M;j++) { visited[i][j] = 1; dfs(j, i, 1, arr[i][j]); visited[i][j] = 0; check(j, i); } } 메인함수의 일부분이다. 이 함수를 보면, dfs를 통해서 depth 4인 탐색을 수행한다. check는 매뉴얼하게 ㅗ 모양의 도형..
2023.09.01 -
후...
https://www.acmicpc.net/problem/17825 잘안돼서 다시 풀어바야겠따 ㅠㅠ #include #include #include using namespace std; int dice[10]; int map[42]; int turn[42]; int score[42]; int which[4]; int check[42]; int ans; void dfs(int cnt, int sum){ if (cnt==10){ ans = max(ans, sum); return; } for (int i=0;idice[i]; } for (int i=0;i
2023.08.29