https://school.programmers.co.kr/learn/courses/30/lessons/64062
๋ฌธ์ ์ค๋ช
[๋ณธ ๋ฌธ์ ๋ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ ํ ์คํธ ๊ฐ๊ฐ ์ ์๊ฐ ์๋ ๋ฌธ์ ์ ๋๋ค.]
์นด์นด์ค ์ด๋ฑํ๊ต์ "๋๋์ฆ ์น๊ตฌ๋ค"์ด "๋ผ์ด์ธ" ์ ์๋๊ณผ ํจ๊ป ๊ฐ์ ์ํ์ ๊ฐ๋ ์ค์ ์ง๊ฒ๋ค๋ฆฌ๊ฐ ์๋ ๊ฐ์ธ์ ๋ง๋์ ๊ฑด๋ํธ์ผ๋ก ๊ฑด๋๋ ค๊ณ ํฉ๋๋ค. "๋ผ์ด์ธ" ์ ์๋์ "๋๋์ฆ ์น๊ตฌ๋ค"์ด ๋ฌด์ฌํ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์๋๋ก ๋ค์๊ณผ ๊ฐ์ด ๊ท์น์ ๋ง๋ค์์ต๋๋ค.
- ์ง๊ฒ๋ค๋ฆฌ๋ ์ผ๋ ฌ๋ก ๋์ฌ ์๊ณ ๊ฐ ์ง๊ฒ๋ค๋ฆฌ์ ๋๋ค๋์๋ ๋ชจ๋ ์ซ์๊ฐ ์ ํ ์์ผ๋ฉฐ ๋๋ค๋์ ์ซ์๋ ํ ๋ฒ ๋ฐ์ ๋๋ง๋ค 1์ฉ ์ค์ด๋ญ๋๋ค.
- ๋๋ค๋์ ์ซ์๊ฐ 0์ด ๋๋ฉด ๋ ์ด์ ๋ฐ์ ์ ์์ผ๋ฉฐ ์ด๋๋ ๊ทธ ๋ค์ ๋๋ค๋๋ก ํ๋ฒ์ ์ฌ๋ฌ ์นธ์ ๊ฑด๋ ๋ธ ์ ์์ต๋๋ค.
- ๋จ, ๋ค์์ผ๋ก ๋ฐ์ ์ ์๋ ๋๋ค๋์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด ๊ฐ์ฅ ๊ฐ๊น์ด ๋๋ค๋๋ก๋ง ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
"๋๋์ฆ ์น๊ตฌ๋ค"์ ๊ฐ์ธ์ ์ผ์ชฝ์ ์์ผ๋ฉฐ, ๊ฐ์ธ์ ์ค๋ฅธ์ชฝ ๊ฑด๋ํธ์ ๋์ฐฉํด์ผ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ๊ฒ์ผ๋ก ์ธ์ ํฉ๋๋ค.
"๋๋์ฆ ์น๊ตฌ๋ค"์ ํ ๋ฒ์ ํ ๋ช ์ฉ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋์ผ ํ๋ฉฐ, ํ ์น๊ตฌ๊ฐ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๋ชจ๋ ๊ฑด๋ ํ์ ๊ทธ ๋ค์ ์น๊ตฌ๊ฐ ๊ฑด๋๊ธฐ ์์ํฉ๋๋ค.
๋๋ค๋์ ์ ํ ์ซ์๊ฐ ์์๋๋ก ๋ด๊ธด ๋ฐฐ์ด stones์ ํ ๋ฒ์ ๊ฑด๋๋ธ ์ ์๋ ๋๋ค๋์ ์ต๋ ์นธ์ k๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ต๋ ๋ช ๋ช ๊น์ง ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋์ผ ํ๋ ๋๋์ฆ ์น๊ตฌ๋ค์ ์๋ ๋ฌด์ ํ ์ด๋ผ๊ณ ๊ฐ์ฃผํฉ๋๋ค.
- stones ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ 200,000 ์ดํ์ ๋๋ค.
- stones ๋ฐฐ์ด ๊ฐ ์์๋ค์ ๊ฐ์ 1 ์ด์ 200,000,000 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- k๋ 1 ์ด์ stones์ ๊ธธ์ด ์ดํ์ธ ์์ฐ์์ ๋๋ค.
์ ์ถ๋ ฅ ์
stones | k | result |
[2, 4, 5, 3, 2, 1, 4, 2, 5, 1] | 3 | 3 |
์ ์ถ๋ ฅ ์์ ๋ํ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
์ฒซ ๋ฒ์งธ ์น๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์น๊ตฌ๊ฐ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ํ ๋๋ค๋์ ์ ํ ์ซ์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
๋ ๋ฒ์งธ ์น๊ตฌ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ ์น๊ตฌ๊ฐ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ํ ๋๋ค๋์ ์ ํ ์ซ์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
์ธ ๋ฒ์งธ ์น๊ตฌ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์์ต๋๋ค.
์ธ ๋ฒ์งธ ์น๊ตฌ๊ฐ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ํ ๋๋ค๋์ ์ ํ ์ซ์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
๋ค ๋ฒ์งธ ์น๊ตฌ๊ฐ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด, ์ธ ๋ฒ์งธ ๋๋ค๋์์ ์ผ๊ณฑ ๋ฒ์งธ ๋๋ค๋๋ก ๋ค ์นธ์ ๊ฑด๋๋ฐ์ด์ผ ํฉ๋๋ค. ํ์ง๋ง k = 3 ์ด๋ฏ๋ก ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ต๋ 3๋ช ์ด ๋๋ค๋์ ๋ชจ๋ ๊ฑด๋ ์ ์์ต๋๋ค.
๋ด ํด๋ต
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
bool can_cross(const vector<int>& stones, int people, int k)
{
int count = 0;
for(const auto& s : stones)
{
if(s <= people)
++count;
else
count = 0;
// ๋ง์ฝ K๋ฒ ์ด์ ์ฐ์ํด์ ์ฌ๋ ์๋ณด๋ค ๋๋ค๋ ์๊ฐ ์ ์ผ๋ฉด ์คํจ
if(count >= k)
return false;
}
return true;
}
int solution(vector<int> stones, int k) {
int answer = 0;
// ๊ฑด๋ ์ ์๋ ์ต์ ์ฌ๋ ์์ ์ต๋ ์ฌ๋ ์๋ฅผ ๊ตฌํ๋ค.
// ์ต์์ ๊ฒฝ์ฐ : ์๋ฌด๋ ๋ชป ๊ฑด๋ ๊ฒฝ์ฐ
// ์ต๋์ ๊ฒฝ์ฐ : ์ต๋ ๋๋ค๋ ๊ฐ์๋งํผ ๊ฑด๋๋ ๊ฒฝ์ฐ
int min = 0;
int max = *max_element(stones.begin(), stones.end());
while(min <= max)
{
// ์ต๋์ธ์, ์ต์์ธ์์ ํ๊ท ๊ฐ ๊ตฌํ๊ธฐ
int mid = (min+max)/2;
// ํ๊ท ๊ฐ์ผ๋ก ๊ฑด๋ ์ ์๋ค๋ฉด ์ต์ ๊ฑด๋๋ ์ฌ๋ ์ ๋๋ ค๋ณด๊ธฐ
if(can_cross(stones, mid, k))
{
min = mid+1;
}
// ํ๊ท ๊ฐ์ผ๋ก ๊ฑด๋ ์ ์๋ค๋ฉด ์ต๋ ๊ฑด๋๋ ์ฌ๋ ์ ์ค์ด๊ธฐ
else
{
max = mid-1;
}
}
answer = min; // ์ ๋ต์ ๋ง์ง๋ง์ผ๋ก ๊ฑด๋๋๋ฐ ์ฑ๊ณตํ ์ฌ๋ ์
return answer;
}
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] level.3 - ํ๊ดด๋์ง ์์ ๊ฑด๋ฌผ(C++) (0) | 2023.05.16 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] level.3 - ๊ฐ์ฅ ๋จผ ๋ ธ๋(C++) (0) | 2023.05.15 |
ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ์ ๊ตญ์ฌ์ฌ(C++) (0) | 2023.05.11 |
ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ๋ฑ๊ตฃ๊ธธ(C++) (0) | 2023.05.09 |
[๋ฐฑ์ค] 2775๋ฒ : ๋ถ๋ ํ์ฅ์ด ๋ ํ ์ผ(C++) (0) | 2023.05.08 |