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

64-9kyo-hwang #221

Merged
merged 7 commits into from
Oct 3, 2024
Merged
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;
}
49 changes: 49 additions & 0 deletions 9-kyo-hwang/Binary Search/์ง•๊ฒ€๋‹ค๋ฆฌ.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(int InDistance, vector<int> InRocks, int NumRemove)
{
InRocks.emplace_back(InDistance);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์ €๋Š” ์ด ํ•œ ์ค„ ๋•Œ๋ฌธ์— ํ•œ์ฐธ ๋” ๊ณ ์ƒํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ...

๋งˆ์ง€๋ง‰ ๊ตฌ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผํ•ด์„œ InDistance๋ฅผ ๋„ฃ๋Š” ๊ฒƒ ๊ฐ™๊ธดํ•œ๋ฐ
InDistance๊ฐ€ ์—†์–ด์ง€๋Š” ๋ฐ”์œ„์˜ ์ˆ˜(Count)๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋ ์ˆ˜๋„ ์žˆ์ง€ ์•Š๋‚˜์š”...?

๋ƒ…๋‹ค ๋ก ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๊ณ  ๋๋‚œ๊ฒŒ ๋„ˆ๋ฌด ํ—ˆ๋ฌดํ•ด์š”...ใ…œใ… 

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

int LowerDistance = 1, UpperDistance = InDistance;
int Answer = 0;

auto IsValid = [&](int EstimateDistance)
{
int Count = 0, CurrentPos = 0;
for(int RockPos : InRocks)
{
int Distance = RockPos - CurrentPos;
if(Distance >= EstimateDistance)
{
CurrentPos = RockPos;
}
else
{
Count++;
}
}

return Count <= NumRemove;
};

while(LowerDistance <= UpperDistance)
{
int EstimateDistance = (LowerDistance + UpperDistance) / 2;
if(IsValid(EstimateDistance))
{
Answer = EstimateDistance;
LowerDistance = EstimateDistance + 1;
}
else
{
UpperDistance = EstimateDistance - 1;
}
}

return Answer;
}
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;
}
9 changes: 8 additions & 1 deletion 9-kyo-hwang/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,11 @@
| 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) |
| 64์ฐจ์‹œ | 2024.9.8 | Binary Search | [์ง•๊ฒ€๋‹ค๋ฆฌ](https://school.programmers.co.kr/learn/courses/30/lessons/43236) | [#221](https://github.com/AlgoLeadMe/AlgoLeadMe-3/pull/221) |
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