Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

63-9kyo-hwang #218

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
cin.tie(nullptr)->sync_with_stdio(false);

int N, M; cin >> N >> M;

vector<int> Nums(N);
for(int& Num : Nums)
{
cin >> Num;
}

auto IsValid = [&](int EstimateScore)
{
int Count = 1;
int Min = Nums[0], Max = Nums[0];

for(int i = 1; i < N; ++i)
{
Min = min(Min, Nums[i]);
Max = max(Max, Nums[i]);

if(Max - Min > EstimateScore)
{
Count++;
Min = Nums[i];
Max = Nums[i];
}
}

return Count <= M;
};

int Min = 0, Max = *max_element(Nums.begin(), Nums.end());
int Score = Max;
while(Min <= Max)
{
int EstimateScore = (Min + Max) / 2;
if(IsValid(EstimateScore))
{
Score = min(Score, EstimateScore);
Max = EstimateScore - 1;
}
else
{
Min = EstimateScore + 1;
}
}

cout << Score;

return 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int Merge(vector<string>& Maps, int x, int y)
{
if(x < 0 || x >= Maps.size() || y < 0 || y >= Maps[0].size() || Maps[x][y] == 'X')
{
return 0;
}

int Day = Maps[x][y] - '0';
Maps[x][y] = 'X';

return Day
+ Merge(Maps, x - 1, y)
+ Merge(Maps, x, y + 1)
+ Merge(Maps, x + 1, y)
+ Merge(Maps, x, y - 1);
}

vector<int> solution(vector<string> Maps)
{
vector<int> DaysofStay;
for(int i = 0; i < Maps.size(); ++i)
{
for(int j = 0; j < Maps[0].size(); ++j)
{
if(Maps[i][j] != 'X')
{
DaysofStay.emplace_back(Merge(Maps, i, j));
}
}
}

if(DaysofStay.empty())
{
return {-1};
}

sort(DaysofStay.begin(), DaysofStay.end());
return DaysofStay;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#include <vector>
#include <string>

using namespace std;

int solution(int Storey)
{
int Answer = 0;

while(Storey)
{
int Remainder = Storey % 10;
int Quotient = Storey / 10;

if(Remainder < 5) // ์˜ˆ: 54
{
Answer += Remainder; // 54 -> 50
}
else if(Remainder > 5) // ์˜ˆ: 16
{
++Quotient;
Answer += 10 - Remainder; // 16 -> 20
}
else
{
if(Quotient % 10 >= 5) // ์˜ˆ: 55 -> 60 / 25 -> 20
{
++Quotient;
}

Answer += Remainder;
}

Storey = Quotient;
}

return Answer;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

struct FPlan
{
string Name;
int Start;
int Playtime;

FPlan() {}
FPlan(const string& InName, const string& InStart, const string& InPlaytime)
{
Name = InName;
Start = stoi(InStart.substr(0, 2)) * 60 + stoi(InStart.substr(3, 2));
Playtime = stoi(InPlaytime);
}

const bool operator<(const FPlan& Rhs) const
{
return Start < Rhs.Start;
}
};

vector<string> solution(vector<vector<string>> InPlans)
{
vector<FPlan> Plans;
for(const vector<string>& Plan : InPlans)
{
Plans.push_back({Plan[0], Plan[1], Plan[2]});
}

sort(Plans.begin(), Plans.end());

vector<string> Result;
vector<int> Paused;

for(int i = 0; i < Plans.size() - 1; ++i)
{
int TimeDifference = Plans[i + 1].Start - Plans[i].Start;
if(Plans[i].Playtime > TimeDifference)
{
Plans[i].Playtime -= TimeDifference;
Paused.emplace_back(i);
continue;
}

TimeDifference -= Plans[i].Playtime;
Plans[i].Playtime = 0;
Result.emplace_back(Plans[i].Name);

while(TimeDifference > 0 && !Paused.empty())
{
int Index = Paused.back();
if(Plans[Index].Playtime > TimeDifference)
{
Plans[Index].Playtime -= TimeDifference;
break;
}

TimeDifference -= Plans[Index].Playtime;
Plans[Index].Playtime = 0;
Result.emplace_back(Plans[Index].Name);
Paused.pop_back();
}
}

Result.emplace_back(Plans.back().Name);

while(!Paused.empty())
{
Result.emplace_back(Plans[Paused.back()].Name);
Paused.pop_back();
}

return Result;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<vector<int>> Data, int Col, int RowBegin, int RowEnd)
{
sort(Data.begin(), Data.end(), [&](const auto& Lhs, const auto& Rhs)
{
return Lhs[Col - 1] == Rhs[Col - 1] ? Lhs[0] > Rhs[0] : Lhs[Col - 1] < Rhs[Col - 1];
});

int HashVal = 0;
for(int i = RowBegin; i <= RowEnd; ++i)
{
int S_i = 0;
for(const int Val : Data[i - 1])
{
S_i += Val % i;
}
HashVal ^= S_i;
}

return HashVal;
}
8 changes: 7 additions & 1 deletion 9-kyo-hwang/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,10 @@
| 54์ฐจ์‹œ | 2024.7.04 | Data Structure | [16934 ๊ฒŒ์ž„ ๋‹‰๋„ค์ž„](https://www.acmicpc.net/problem/16934) | [#197](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/197) |
| 55์ฐจ์‹œ | 2024.7.09 | Simulation | [17144 ๋ฏธ์„ธ๋จผ์ง€ ์•ˆ๋…•!](https://www.acmicpc.net/problem/16934) | [#202](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/202) |
| 56์ฐจ์‹œ | 2024.7.12 | Tree | [15681 ํŠธ๋ฆฌ์™€ ์ฟผ๋ฆฌ](https://www.acmicpc.net/problem/15681) | [#204](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/204) |
| 57์ฐจ์‹œ | 2024.7.15 | Dynamic Programming | [17070 ํŒŒ์ดํ”„ ์˜ฎ๊ธฐ๊ธฐ 1](https://www.acmicpc.net/problem/17070) | [#206](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/206) |
| 57์ฐจ์‹œ | 2024.7.15 | Dynamic Programming | [17070 ํŒŒ์ดํ”„ ์˜ฎ๊ธฐ๊ธฐ 1](https://www.acmicpc.net/problem/17070) | [#206](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/206) |
| 58์ฐจ์‹œ | 2024.7.29 | Trie | [14725 ๊ฐœ๋ฏธ๊ตด](https://www.acmicpc.net/problem/14725) | [#207](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/207) |
| 59์ฐจ์‹œ | 2024.8.01 | Greedy | [๋งˆ๋ฒ•์˜ ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ](https://school.programmers.co.kr/learn/courses/30/lessons/148653) | [#210](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/210) |
| 60์ฐจ์‹œ | 2024.8.05 | Implementation | [๊ณผ์ œ ์ง„ํ–‰ํ•˜๊ธฐ](https://school.programmers.co.kr/learn/courses/30/lessons/176962) | [#213](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/213) |
| 61์ฐจ์‹œ | 2024.8.08 | Implementation | [ํ…Œ์ด๋ธ” ํ•ด์‹œ ํ•จ์ˆ˜](https://school.programmers.co.kr/learn/courses/30/lessons/147354) | [#214](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/214) |
| 62์ฐจ์‹œ | 2024.8.12 | Graph Traversal | [๋ฌด์ธ๋„ ์—ฌํ–‰](https://school.programmers.co.kr/learn/courses/30/lessons/154540) | [#217](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/217) |
| 63์ฐจ์‹œ | 2024.9.3 | Binary Search | [๊ตฌ๊ฐ„ ๋‚˜๋ˆ„๊ธฐ2](https://www.acmicpc.net/problem/13397) | [#218](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/218) |
55 changes: 55 additions & 0 deletions 9-kyo-hwang/Trie/14725 ๊ฐœ๋ฏธ๊ตด.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#include <iostream>
#include <string>
#include <map>

using namespace std;

struct FNode
{
map<string, FNode*> Node;
};

FNode* Root;

void Print(FNode* InNode = Root, const string& Prefix="")
{
if(InNode == nullptr)
{
return;
}

for(const auto& [Data, Next] : InNode->Node)
{
cout << Prefix << Data << "\n";
Print(Next, Prefix + "--");
}
}

int main()
{
cin.tie(nullptr)->sync_with_stdio(false);

Root = new FNode();

int N; cin >> N;
for(int n = 0; n < N; ++n)
{
FNode* Ptr = Root;

int K; cin >> K;
for(int k = 0; k < K; ++k)
{
string Info; cin >> Info;
if(Ptr->Node.count(Info) == 0)
{
Ptr->Node[Info] = new FNode();
}

Ptr = Ptr->Node[Info];
}
}

Print();

return 0;
}
Loading