목록Algorithm/백준 (39)
서의 공간
#include #include #include using namespace std; vector P; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N; cin >> N; P.resize(N + 1); for (int i = 1; i > P[i]; sort(begin(P), end(P)); int ret = 0; int sum = 0; for (int i = 1; i < P.size(); ++i) { sum += P[i]; ret += sum; } cout
#include #include #include #include using namespace std; int 배추밭[52][52]; bool vis[52][52]; int dx[4] = { 1, 0, -1, 0 }; int dy[4] = { 0, -1, 0, 1 }; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int testCase; cin >> testCase; while (testCase--) { int M, N, K; cin >> M >> N >> K; for (int i = 0; i > X >> Y; 배추밭[X][Y] = 1; } // M: 가..
#include #include #include using namespace std; string operator+(string a, string b) { string ret; int n = 0, carry = 0; reverse(begin(a), end(a)); reverse(begin(b), end(b)); while (a.size() b.size()) b += '0'; for (size_t i = 0; i < a.size(); ++i) { n = ((a[i] - '0') + (b[i] - '0') + carry) % 10; ret += n + '0'; carry = ((a[i] - '0') + (b[i] - '0') + carr..
#include #include using namespace std; bool paper[130][130]; int w = 0, b = 0; void DQ(int y, int x, int size) { bool cur = paper[y][x]; for (int i = y; i < y + size; ++i) { for (int j = x; j < x + size; ++j) { if (paper[i][j] != cur) { DQ(y, x, size / 2); DQ(y + size / 2, x, size / 2); DQ(y, x + size / 2, size / 2); DQ(y + size / 2, x + size / 2, size / 2); return; } } } if (cur == 0) w++; else..
#include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); unordered_map hMap; int testCase; cin >> testCase; while (testCase--) { int n; cin >> n; for(int i = 0; i > name >> type; if (hMap.find(type) != end(hMap))// type이 이미 있다면 hMap[type]++; else hMap.insert({ type, 1 }); } int ret = 1;..
1316번: 그룹 단어 체커 (acmicpc.net) #include #include #include using namespace std; // 연속이 끊긴 알파벳이 그 전에 등장했는지의 여부 // 예를 들어 aaabba에서 맨 뒤 a 위치에서 그 앞전에 a가 이미 등장했었는지를 알아야 함 bool presented[26]; bool Check(string& str) { bool ret = true; presented[str[0] - 'a'] = true; char cur = str[0]; for (size_t i = 1; i < str.length(); ++i) { if (cur != str[i]) { if (presented[str[i] - 'a']) {// 이미 등장했었다면 ret = false; ..
2941번: 크로아티아 알파벳 (acmicpc.net) 1. 첫 번째 방법 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); // 첫 번째 방법 string str; cin >> str; vector strs = { "c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" }; for (size_t i = 0; i < strs.size(); ++i) for (size_t pos = str.find(strs[i]); pos != string::npos; pos = str.find(strs[i])..
[문제]: 1629번: 곱셈 (acmicpc.net) A, B, C가 int보다 작은 자연수라 하더라도, 곱하기 연산을 하는 과정에서 int의 범위(약 21억)보다 커질 수 있다. 따라서 long long 자료형을 사용한 것을 확인 할 수 있다. POWER() 함수의 기저 사례(base case)는 지수 b가 1일 때 자기 자신(a)을 반환한다. 또한, \[a\equiv b\pmod{m} \text{이고 } c\equiv d\pmod{m} \text{이면, } ac\equiv bd\pmod{m} \text{이다.}\] 예를 들어, \[12^{58}\equiv 4\pmod{67}\text{이면 위 식에 의해, } 12^{116}\equiv 16\pmod{67}\text{이다.}\] \(12^{116}\)을..
[문제]: 1697번: 숨바꼭질 (acmicpc.net) #include #include #include using namespace std; int dist[100001]; int N, K; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> N >> K; fill(dist, dist + 100001, -1); // 시작지점 dist[N] = 0; queue q; q.push(N); // 동생의 위치를 찾으면 while문 종료 while (dist[K] == -1) { int cur = q.front(); q.pop(); for (int nxt : { cur - 1, cur + 1, 2 * c..
[문제]: 4179번: 불! (acmicpc.net) 불의 이동은 지훈이의 이동에 독립적이다. 지훈이가 어떻게 움직이든 불은 확산되는 규칙에 따라 계속 확산시켜나가면 된다. 반면 지훈이는 그렇지 않다. 지훈이는 불의 이동에 따라 움직임에 제한을 받게 된다. 이렇게 두 시작점이 서로 간에 영향을 주지 않는 경우라면(현재 불만 지훈이의 이동에 영향을 준다), 두 번의 BFS만으로 해결할 수 있다. 불만 먼저 BFS을 하여 각 공간의 시간들을 구한 후, 지훈이를 BFS 한다. 지훈이가 각 장소에 도착하는 시간과 불이 도착하는 시간을 비교하여 움직임을 제한한다. 추가적인 내용은 코드에 주석으로 달아놓았다. #include #include #include #include using namespace std; st..