목록C++ (115)
정화 코딩

https://www.acmicpc.net/problem/14938 우선 모든 노드와 노드 사이의 최단 경로를 구해 놓는다.그 후 각 지역에 떨어졌다고 가정했을 때, 얻을 수 있는 아이템의 수를 구해서 최댓값을 찾는다. 모든 노드 간의 최단 경로가 필요하기 때문에 플로이드-워셜을 사용하였다. #include #include using namespace std;int MAX_SIZE = 1000000000;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, r; cin >> n >> m >> r; vector item(n + 1); for (int i = 1; i > item[i];..

https://www.acmicpc.net/problem/1214 대충 이런식으로 써가면서 답을 어떤식으로 구해야 할지 생각해봤다. 일단 p d에서 q의 배수(tq)를 뺀 값(dif)을 p로 나누어서 나머지(rem)를 구했다. 이 때 나머지가 음수거나 0이면 p를 더해서 0보다 큰 값으로 바꾸어준다. 이 값이 가장 큰 경우에 지불할 수 있는 금액의 최소가 된다. 그래서 아까 구한 나머지(rem)가 가장 클 때 답을 구하면 되는데, d에서 뺐던 그 q의 배수(tq)에 몫(quo)을 더해주면 된다. 몫(quo)은 아까 나머지에 p를 더하는 과정을 거쳤으면 그냥 몫으로 계산하면 되고, 그렇지 않았다면 몫+1로 계산하면 된다. 아 그리고 아까 구한 나머지(rem)가 0일 때는 거스름돈 없이 딱 맞게 돈을 지..

https://www.acmicpc.net/problem/14502 #include #include #include using namespace std;int n, m, ans;vector> a;int dx[] = {1, -1, 0, 0};int dy[] = {0, 0, 1, -1};int bfs() { queue> q; vector> vst(n, vector(m, 0)); for (int i = 0; i = 0 && nxti = 0 && nxtj > n >> m; a = vector>(n, vector(m)); for (int i = 0; i > a[i][j]; } } dfs(0, 0, -1); cout 백트래킹으로 3개의 벽을 놓는 모든 경우를 ..

https://www.acmicpc.net/problem/2622 #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; int ans = 0; // i k) ans++; } } cout 첨에는 합동이 뭔지 살짝 헷갈렸다. 생각해보니 3개의 변의 길이가 모두 같으면 SSS 합동으로, 어떻게 조합해도 하나의 삼각형으로 본다.즉, i // i k) ans++; } }아 처음에는 위 코드처럼 k 시간 단축! 참고: 삼각형의 합동 조건

https://www.acmicpc.net/problem/16236 #include #include #include #include using namespace std;int n, curs, cnt, time;vector> m;int dx[] = {1, -1, 0, 0};int dy[] = {0, 0, 1, -1};vector targetf(int si, int sj) { vector> vst(n, vector(n, -1)); queue> q; vector> fish; q.emplace(si, sj); vst[si][sj] = 0; while (!q.empty()) { int curi = q.front().first; int curj = q.fro..

https://www.acmicpc.net/problem/30823 처음에는 그냥 진짜 문제 지문 그대로 구현했더니 시간 초과를 받아서 대충 이런식으로... 몇개 해보면서 규칙을 찾았다. 규칙을 정리하면 다음과 같다.뒤의 (n - k + 1)개의 문자들을 순서를 유지하고 그대로 앞으로 나온다.앞의 (k - 1)개의 문자들은 뒤로 가는데, 이 순서는 주의가 필요하다. n + k가 홀수면 순서를 유지하고 그대로 붙고, 짝수면 뒤집힌 순서로 붙는다. #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, k; cin >> n >> k; string ..

https://www.acmicpc.net/problem/15686 일단 모든 집과 모든 치킨집의 쌍에 대해서 거리를 구하기 위해서 집의 개수만큼 bfs를 돌렸다. (근데 생각해보니 bfs 쓸 필요 없이 좌표만 빼서 거리를 구할 수 있다.)그 결과(모든 집과 모든 치킨집의 쌍에 대한 거리)를 sp 배열에 담아두었다.그 후, 백트래킹으로 가능한 모든 치킨집 조합에 대해서 도시의 치킨 거리를 계산한다. 그 중 가장 최소인 값을 출력하면 된다. #include #include #include using namespace std;int dx[] = {1, -1, 0, 0};int dy[] = {0, 0, 1, -1};int n, m, hn, cn;int ans = 1000000;vector cchk;vector..

https://www.acmicpc.net/problem/2331 #include #include using namespace std;int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int a, p; cin >> a >> p; vector ans; ans.push_back(a); int idx = -1; int cur = a; while (1) { int nxt = 0; while (cur > 0) { int rem = cur % 10; int tmp = 1; for (int i = 0; i 단순..