Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป ์ฝ”ํ…Œ/๐Ÿ“Œ JAVA

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/JAVA] ์ง€ํ ์ ‘๊ธฐ

๋ฐ˜์‘ํ˜•

 

 

 

๐Ÿ”— ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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)์ด๋‹ค.

๋ฐ˜์‘ํ˜•