diff --git "a/weekly/week03/BOJ_1477_\355\234\264\352\262\214\354\206\214\354\204\270\354\232\260\352\270\260/whqtker.cpp" "b/weekly/week03/BOJ_1477_\355\234\264\352\262\214\354\206\214\354\204\270\354\232\260\352\270\260/whqtker.cpp" new file mode 100644 index 0000000..9c7c299 --- /dev/null +++ "b/weekly/week03/BOJ_1477_\355\234\264\352\262\214\354\206\214\354\204\270\354\232\260\352\270\260/whqtker.cpp" @@ -0,0 +1,57 @@ +#include +#include +#include + +using namespace std; + +vector v; + +// 휴게소 간 최대 거리를 x로 했을 때, 설치 가능한 휴게소의 수를 리턴 +int chk(int x) { + int cnt = 0; + for (int i = 0; i < v.size() - 1; i++) { + int gap = v[i + 1] - v[i]; + + if (gap % x == 0) { + cnt += gap / x - 1; + } + else { + cnt += gap / x; + } + } + + return cnt; +} + +int main() { + int n, m, l; + cin >> n >> m >> l; + + for (int i = 0; i < n; i++) { + int x; + cin >> x; + v.push_back(x); + } + v.push_back(0); + v.push_back(l); + + sort(v.begin(), v.end()); + + int left = 1; + int right = l; + int mid; + while (left <= right) { + mid = (left + right) / 2; // mid: 휴게소 간 최대 거리 + + int cnt = chk(mid); + + if (cnt <= m) { + right = mid - 1; + } + else { + left = mid + 1; + } + } + + cout << left; +} \ No newline at end of file diff --git "a/weekly/week04/BOJ_14925_\353\252\251\354\236\245\352\261\264\354\204\244\355\225\230\352\270\260/whqtker.cpp" "b/weekly/week04/BOJ_14925_\353\252\251\354\236\245\352\261\264\354\204\244\355\225\230\352\270\260/whqtker.cpp" new file mode 100644 index 0000000..0f23da8 --- /dev/null +++ "b/weekly/week04/BOJ_14925_\353\252\251\354\236\245\352\261\264\354\204\244\355\225\230\352\270\260/whqtker.cpp" @@ -0,0 +1,26 @@ +#include +#include + +using namespace std; + +int dp[1001][1001]; + +int main() { + int n, m; + cin >> n >> m; + + int ans = 0; + for (int i = 1; i <= n; i++) { + for (int j = 1; j <= m; j++) { + int x; + cin >> x; + + if (x == 0) { + dp[i][j] = min({ dp[i - 1][j - 1],dp[i - 1][j],dp[i][j - 1] }) + 1; + ans = max(ans, dp[i][j]); + } + } + } + + cout << ans; +} \ No newline at end of file diff --git "a/weekly/week04/BOJ_1946_\354\213\240\354\236\205\354\202\254\354\233\220/whqtker.cpp" "b/weekly/week04/BOJ_1946_\354\213\240\354\236\205\354\202\254\354\233\220/whqtker.cpp" new file mode 100644 index 0000000..eab0f64 --- /dev/null +++ "b/weekly/week04/BOJ_1946_\354\213\240\354\236\205\354\202\254\354\233\220/whqtker.cpp" @@ -0,0 +1,48 @@ +#include +#include +#include + +using namespace std; + +int main() { + int T; + cin >> T; + while (T--) { + int n; + cin >> n; + + vector> v; + for (int i = 0; i < n; i++) { + int a, b; + cin >> a >> b; + v.push_back({ a,b }); + } + + sort(v.begin(), v.end()); + + int cnt = 0; // 탈락한 애들 수 + + // 비교 원소 조건 + // 이전보다 first가 클 것 (항상 만족) + // 이전보다 second가 작을 것 + int cmpA = v[0].first; + int cmpB = v[0].second; + for (int i = 1; i < v.size(); i++) { + int curA = v[i].first; + int curB = v[i].second; + + if (curA > cmpA && curB > cmpB) { + cnt++; + } + // 비교 원소 업데이트 + else { + if (curB < cmpB) { + cmpA = curA; + cmpB = curB; + } + } + } + + cout << n - cnt << "\n"; + } +} \ No newline at end of file