Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions weekly/week03/BOJ_1477_휴게소세우기/whqtker.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> 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;
}
26 changes: 26 additions & 0 deletions weekly/week04/BOJ_14925_목장건설하기/whqtker.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include <iostream>
#include <algorithm>

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;
}
48 changes: 48 additions & 0 deletions weekly/week04/BOJ_1946_신입사원/whqtker.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;

vector<pair<int, int>> 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";
}
}