๐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
https://school.programmers.co.kr/learn/courses/30/lessons/340199
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๐ ๋ฌธ์ ์์ฝ

๋ฏผ์๋ ๋ค์ํ ํฌ๊ธฐ์ ์งํ๋ฅผ ์์งํ๋ฉฐ, ์ง๊ฐ์ ๋ฃ๊ธฐ ์ํด ์งํ๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ฐ์ผ๋ก ์ ์ด์ผ ํ๋ค.
์ด๋, ์๋์ ๊ท์น์ ๋ฐ๋ผ์ ์ ์ด์ผ ํ๋ค.
- ํญ์ ๋ ๊ธด ์ชฝ์ ๋ฐ์ผ๋ก ์ ๋๋ค.
- ํ์์ธ ๊ฒฝ์ฐ, ๋ฐ์ผ๋ก ์ ์ ๋ ์๊ธด ์์์ ์ดํ๋ ๋ฒ๋ฆฐ๋ค.
- ์งํ๋ฅผ 90๋ ํ์ ์์ผ๋ ๋๋ค.
→ ์ฆ, bill์ (๊ฐ๋ก, ์ธ๋ก)๋ (์ธ๋ก, ๊ฐ๋ก)์ค ํ๋๋ผ๋ ์ง๊ฐ ํฌ๊ธฐ ์ดํ๊ฐ ๋๋ฉด ๋ฃ์ ์ ์๋ค. - ์ ์ด์ผ ํ๋ ์ต์ ํ์๋ฅผ ๊ตฌํด์ผ ํ๋ค.
๐ก ์์ด๋์ด
์ด ๋ฌธ์ ๋ ์์ด๋์ด๋ผ๊ณ ํ ๊ฒ๋ ์๋๊ฒ, ๋ฌธ์ ์์ ์ด๋ป๊ฒ ํ์ด์ผ ํ๋์ง๋ฅผ ์๋ ค์ค์ ์ฝ๋๋ก ์ฎ๊ธฐ๊ธฐ๋ง ํ๋ฉด ๋๋ค ๐
๊ทธ๋๋ ํ ๋ฒ ์ค๋ช ํ์๋ฉด ์๋์ ๊ฐ๋ค.
1๏ธโฃ ์งํ์ ํฌ๊ธฐ๊ฐ ์ง๊ฐ๋ณด๋ค ํฐ์ง ํ์ธํ๊ธฐ
๋๋ ค์ ๋ฃ์ด๋ ์๊ด ์์ผ๋,
๋จ์ํ ์ง๊ฐ์ ๊ธด ์ชฝ์ด ์งํ์ ๊ธด ์ชฝ๋ณด๋ค ํฌ๊ณ , ์ง๊ฐ์ ์งง์ ์ชฝ์ด ์ง๊ฐ์ ์งง์ ์ชฝ๋ณด๋ค ํฌ๊ธฐ๋ง ํ๋ฉด
์ฐ๋ฆฌ๋ ํด๋น ์งํ๋ฅผ ์ง๊ฐ์ ๋ฃ์ ์ ์๋ค.
๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด์ ์ค์ ํด์ฃผ์๋ค.
Math.min(bill_width, bill_height) > Math.min(wallet_width, wallet_height) || Math.max(bill_width, bill_height) > Math.max(wallet_width, wallet_height))
2๏ธโฃ ์ง๊ฐ๋ณด๋ค ์งํ๊ฐ ํฌ๋ค๋ฉด, ์งํ๋ฅผ ๋ฐ์ผ๋ก ์ ์ด์ฃผ๊ธฐ
๋ง์ฝ ๋ฐ๋ณต๋ฌธ ์กฐ๊ฑด ๊ฒ์ฌ์์ ์คํจํ๋ค๋ฉด (์งํ๊ฐ ์ง๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด),
์งํ์ ๊ธด ์ชฝ์ ์ฐพ์์ ๋ฐ์ผ๋ก ์ ์ด์ฃผ๋ฉด ๋๋ค.
if(bill_width > bill_height){
bill_width /= 2;
}
else{
bill_height /= 2;
}
3๏ธโฃ ์กฐ๊ฑด์ ๊ฑธ๋ ค์ ์งํ ์ ๊ธฐ๋ฅผ ์ํํ๋ค๋ฉด, ์ ์ ํ์์ 1์ฉ ๋ํ๊ธฐ
while๋ฌธ์ ๋์๋ค๋ ๋ง์,
์งํ๊ฐ ์ง๊ฐ์ ํฌ๊ธฐ๋ณด๋ค ์ปค์ ๋ฐ์ผ๋ก ์ ๋ ๊ณผ์ ์ ํ ๋ฒ ์ํํ๋ค๋ ์๋ฏธ๋๊น
answer์๋ค๊ฐ 1์ ๋ํด์ฃผ๋ฉด ๋๋ค.
๐ฉ๐ป๐ป ์ต์ข ์ฝ๋
class Solution {
public int solution(int[] wallet, int[] bill) {
int wallet_height = wallet [1];
int wallet_width = wallet[0];
int bill_width = bill[0];
int bill_height = bill[1];
int answer = 0;
while(Math.min(bill_width, bill_height) > Math.min(wallet_width, wallet_height) || Math.max(bill_width, bill_height) > Math.max(wallet_width, wallet_height)){
if(bill_width > bill_height){
bill_width /= 2;
}
else{
bill_height /= 2;
}
answer++;
}
return answer;
}
}
๐ ์๊ฐ ๋ณต์ก๋
๐ ๋ฐ๋ณต์ ์ต๋ ํ์
์งํ์ ๊ธธ์ด๋ ์ต๋ 2000์ธ๋ฐ,
๋งค๋ฒ ๋ ๊ธด ์ชฝ์ ์ ๋ฐ์ผ๋ก ์ค์ด๋ฏ๋ก, ๊ฐ ๋ณ์ ๋ก๊ทธ ์ค์ผ์ผ๋ก ์ค์ด๋ ๋ค.
์ฆ, ์ด๋ค ๊ธธ์ด L์ด ์๋ค๊ณ ํ ๋,
L → L/2 → L/4 → ... → 1์ด ๋๊ธฐ๊น์ง log2(L)๋ฒ ์ดํ๋ก ์ ๋๋ค.
๋ฐ๋ผ์ ์ต๋ ์งํ์ ํฌ๊ธฐ 2000์ ๊ธฐ์ค์ผ๋ก
log2(2000) ≈ 11 ์ด๋ฏ๋ก,
์ต๋ ์ฝ 11๋ฒ ์ ์ผ๋ฉด ์งํ์ ํฌ๊ธฐ๋ ๋ฌด์กฐ๊ฑด 1 ์ดํ๊ฐ ๋๋ค.
โ ์ต์ข ์๊ฐ ๋ณต์ก๋
- ํ ๋ฒ ์ ์ ๋๋ง๋ค ์งํ๊ฐ ์ง๊ฐ์ ๋ค์ด๊ฐ ์ ์๋์ง ํ์ธ → ์์ ์๊ฐ O(1)
- ์ต๋ ์ ๋ ํ์๋ log2(max(bill ํฌ๊ธฐ)) ≈ 11
๋ฐ๋ผ์ ์ ์ฒด ์๊ฐ ๋ณต์ก๋๋, O(log2(bill์ ์ต๋ ๊ธธ์ด))๋ผ๊ณ ๋ณผ ์ ์๋ค.
๐๐ป ์ฆ, ์ต์ข ์๊ฐ ๋ณต์ก๋๋ O(logN)์ด๋ค.
'๐ป ์ฝํ > ๐ JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๊ฐ์ฅ ๋ง์ด ๋ฐ์ ์ ๋ฌผ (4) | 2025.07.26 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๊ณต์ (1) | 2025.07.23 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋์์ ์ฌ์๊ธฐ (1) | 2025.07.21 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์ ์ฐ๊ทผ๋ฌด์ (3) | 2025.07.20 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋ฐํํ๋ฉด ์ ๋ฆฌ (2) | 2025.05.28 |