๊ด€๋ฆฌ ๋ฉ”๋‰ด

Binary Journey

[ํ…Œ์ฝ”ํ…Œ์ฝ”1.5 1-07] ์ง€ํ ์ ‘๊ธฐ ๋ณธ๋ฌธ

Algorithm/ํ…Œ์ฝ”ํ…Œ์ฝ”1.5(2025.01)

[ํ…Œ์ฝ”ํ…Œ์ฝ”1.5 1-07] ์ง€ํ ์ ‘๊ธฐ

binaryJournalist 2025. 1. 12. 18:30
๋ฐ˜์‘ํ˜•
๐Ÿ’กํ…Œ์ฝ”ํ…Œ์ฝ” ์‹œ์ฆŒ 1.5 1ํšŒ ๋ชจ์ž„ off-site ๋ฌธ์ œ ํ’€์ด์ž…๋‹ˆ๋‹ค. (2025.01.12)

 

๋ฌธ์ œ

 

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - PCCE ๊ธฐ์ถœ๋ฌธ์ œ 09. ์ง€ํ ์ ‘๊ธฐ

 

๋‚ด์šฉ

 

๋ฏผ์ˆ˜๋Š” ๋‹ค์–‘ํ•œ ์ง€ํ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ์ทจ๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€ํ๋งˆ๋‹ค ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ ์ง€๊ฐ‘์— ๋„ฃ์œผ๋ ค๋ฉด ์—ฌ๋Ÿฌ ๋ฒˆ ์ ‘์–ด์„œ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ง€๊ฐ‘์˜ ํฌ๊ธฐ๊ฐ€ 30 * 15์ด๊ณ  ์ง€ํ์˜ ํฌ๊ธฐ๊ฐ€ 26 * 17์ด๋ผ๋ฉด ํ•œ๋ฒˆ ๋ฐ˜์œผ๋กœ ์ ‘์–ด 13 * 17 ํฌ๊ธฐ๋กœ ๋งŒ๋“  ๋’ค 90๋„ ๋Œ๋ ค์„œ ์ง€๊ฐ‘์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€ํ๋ฅผ ์ ‘์„ ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ์ง€ํ‚ต๋‹ˆ๋‹ค.

  • ์ง€ํ๋ฅผ ์ ‘์„ ๋•Œ๋Š” ํ•ญ์ƒ ๊ธธ์ด๊ฐ€ ๊ธด ์ชฝ์„ ๋ฐ˜์œผ๋กœ ์ ‘์Šต๋‹ˆ๋‹ค.
  • ์ ‘๊ธฐ ์ „ ๊ธธ์ด๊ฐ€ ํ™€์ˆ˜์˜€๋‹ค๋ฉด ์ ‘์€ ํ›„ ์†Œ์ˆ˜์  ์ดํ•˜๋Š” ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
  • ์ ‘ํžŒ ์ง€ํ๋ฅผ ๊ทธ๋Œ€๋กœ ๋˜๋Š” 90๋„ ๋Œ๋ ค์„œ ์ง€๊ฐ‘์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๋งŒ ์ ‘์Šต๋‹ˆ๋‹ค.

์ง€๊ฐ‘์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ๋‹ด์€ ์ •์ˆ˜ ๋ฆฌ์ŠคํŠธ wallet๊ณผ ์ง€ํ์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ๋‹ด์€ ์ •์ˆ˜ ๋ฆฌ์ŠคํŠธ bill๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์ง€๊ฐ‘์— ๋„ฃ๊ธฐ ์œ„ํ•ด์„œ ์ง€ํ๋ฅผ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ์ ‘์–ด์•ผ ํ•˜๋Š”์ง€ returnํ•˜๋„๋ก solutionํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์ง€ํ๋ฅผ ์ง€๊ฐ‘์— ๋„ฃ๊ธฐ ์œ„ํ•ด ์ ‘์–ด์•ผ ํ•˜๋Š” ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

1. ์ง€ํ๋ฅผ ์ ‘์€ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•  ์ •์ˆ˜ ๋ณ€์ˆ˜ answer๋ฅผ ๋งŒ๋“ค๊ณ  0์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
2. ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด bill์˜ ์ž‘์€ ๊ฐ’์ด wallet์˜ ์ž‘์€ ๊ฐ’ ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ bill์˜ ํฐ ๊ฐ’์ด wallet์˜ ํฐ ๊ฐ’ ๋ณด๋‹ค ํฐ ๋™์•ˆ ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
    2-1. bill[0]์ด bill[1]๋ณด๋‹ค ํฌ๋‹ค๋ฉด
        bill[0]์„ 2๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
    2-2. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด
        bill[1]์„ 2๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
    2-3. answer์„ 1 ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
3. answer์„ returnํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„์˜ ์˜์‚ฌ์ฝ”๋“œ์™€ ์ž‘๋™๋ฐฉ์‹์ด ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋„ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.

 

๊ธฐ๋กํ•˜๊ธฐ

๐Ÿ’ก ์–ด๋””๊นŒ์ง€ ์ƒ๊ฐํ•ด๋ดค๋Š”์ง€ ๋‹จ๊ณ„์ ์œผ๋กœ ๊ธฐ๋กํ•ด๋ด…๋‹ˆ๋‹ค.

 

ํ’€์ด

ํ’€์ด ์‹œ๊ฐ„

 

์‹œ์ž‘ ์‹œ๊ฐ ์ข…๋ฃŒ ์‹œ๊ฐ ์ด ์†Œ์š” ์‹œ๊ฐ„
13:33 13:39๋ถ„ 6๋ถ„

 

๋ฌธ์ œ ๋ถ„์„

์ œ์•ฝ ์‚ฌํ•ญ ํŒŒ์•… & ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

 

  • wallet์˜ ๊ธธ์ด = bill์˜ ๊ธธ์ด = 2
  • 10 ≤ wallet[0], wallet[1] ≤ 100
  • 10 ≤ bill[0], bill[1] ≤ 2,000

 

์ž…๋ ฅ๊ฐ’ ๋ถ„์„

๐Ÿ’ก ์ž…๋ ฅ๊ฐ’์„ ๋ถ„์„ํ•˜๋ฉด ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

wallet bill result
[30, 15] [26, 17] 1
[50, 50] [100, 241] 4

 

์˜์‚ฌ ์ฝ”๋“œ ์ž‘์„ฑ

๐Ÿ’ก ์˜์‚ฌ ์ฝ”๋“œ๋Š” ๋™์ž‘ ์ค‘์‹ฌ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜์‚ฌ ์ฝ”๋“œ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ์ˆœ์„œ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜์‚ฌ ์ฝ”๋“œ๋ฅผ ์ถฉ๋ถ„ํžˆ ํ…Œ์ŠคํŠธํ•ด๋ด…๋‹ˆ๋‹ค.

1. ์ง€ํ๋ฅผ ์ ‘์€ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•  ์ •์ˆ˜ ๋ณ€์ˆ˜ answer๋ฅผ ๋งŒ๋“ค๊ณ  0์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
2. ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด bill์˜ ์ž‘์€ ๊ฐ’์ด wallet์˜ ์ž‘์€ ๊ฐ’ ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ bill์˜ ํฐ ๊ฐ’์ด wallet์˜ ํฐ ๊ฐ’ ๋ณด๋‹ค ํฐ ๋™์•ˆ ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
    2-1. bill[0]์ด bill[1]๋ณด๋‹ค ํฌ๋‹ค๋ฉด
        bill[0]์„ 2๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
    2-2. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด
        bill[1]์„ 2๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
    2-3. answer์„ 1 ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
3. answer์„ returnํ•ฉ๋‹ˆ๋‹ค.

 

solution(int[] wallet, int[] bill) {
    // 1. ์ง€ํ๋ฅผ ์ ‘์€ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•  ์ •์ˆ˜ ๋ณ€์ˆ˜ answer๋ฅผ ๋งŒ๋“ค๊ณ  0์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    int answer = 0;
    // 2. ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด bill์˜ ์ž‘์€ ๊ฐ’์ด wallet์˜ ์ž‘์€ ๊ฐ’ ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ bill์˜ ํฐ ๊ฐ’์ด wallet์˜ ํฐ ๊ฐ’ ๋ณด๋‹ค ํฐ ๋™์•ˆ ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
    while (Math.min(wallet[0], wallet[1]) < Math.min(bill[0], bill[1]) || Math.max(wallet[0], wallet[1]) < Math.max(bill[0], bill[1])) {
        if (bill[0] > bill[1]) {
            // bill[0]์ด bill[1]๋ณด๋‹ค ํฌ๋‹ค๋ฉด bill[0]์„ 2๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
            bill[0] /= 2;
        } else {
            // ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด bill[1]์„ 2๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
            bill[1] /= 2;
        }
        // answer์„ 1 ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
        answer++;
    }
    // 3. answer์„ returnํ•ฉ๋‹ˆ๋‹ค.
    return answer;
}

 

 

๊ตฌํ˜„

class Solution {
    public int solution(int[] wallet, int[] bill) {
        // 1. ์ง€ํ๋ฅผ ์ ‘์€ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•  ์ •์ˆ˜ ๋ณ€์ˆ˜ answer๋ฅผ ๋งŒ๋“ค๊ณ  0์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
        int answer = 0;
        // 2. ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด bill์˜ ์ž‘์€ ๊ฐ’์ด wallet์˜ ์ž‘์€ ๊ฐ’ ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ bill์˜ ํฐ ๊ฐ’์ด wallet์˜ ํฐ ๊ฐ’ ๋ณด๋‹ค ํฐ ๋™์•ˆ ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
        while (Math.min(wallet[0], wallet[1]) < Math.min(bill[0], bill[1]) || Math.max(wallet[0], wallet[1]) < Math.max(bill[0], bill[1])) {
            if (bill[0] > bill[1]) {
                // bill[0]์ด bill[1]๋ณด๋‹ค ํฌ๋‹ค๋ฉด bill[0]์„ 2๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
                bill[0] /= 2;
            } else {
                // ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด bill[1]์„ 2๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
                bill[1] /= 2;
            }
            // answer์„ 1 ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.
            answer++;
        }
        // 3. answer์„ returnํ•ฉ๋‹ˆ๋‹ค.
        return answer;
    }
}
๋ฐ˜์‘ํ˜•