Problem ๐Ÿ’ป

https://school.programmers.co.kr/learn/courses/30/lessons/120816

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

๋จธ์“ฑ์ด๋„ค ํ”ผ์ž๊ฐ€๊ฒŒ๋Š” ํ”ผ์ž๋ฅผ ๋‘ ์กฐ๊ฐ์—์„œ ์—ด ์กฐ๊ฐ๊นŒ์ง€ ์›ํ•˜๋Š” ์กฐ๊ฐ ์ˆ˜๋กœ ์ž˜๋ผ์ค๋‹ˆ๋‹ค. ํ”ผ์ž ์กฐ๊ฐ ์ˆ˜ slice์™€ ํ”ผ์ž๋ฅผ ๋จน๋Š” ์‚ฌ๋žŒ์˜ ์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, n๋ช…์˜ ์‚ฌ๋žŒ์ด ์ตœ์†Œ ํ•œ ์กฐ๊ฐ ์ด์ƒ ํ”ผ์ž๋ฅผ ๋จน์œผ๋ ค๋ฉด ์ตœ์†Œ ๋ช‡ ํŒ์˜ ํ”ผ์ž๋ฅผ ์‹œ์ผœ์•ผ ํ•˜๋Š”์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด๋ณด์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ
  • 2 ≤ slice ≤ 10
  • 1 ≤ n ≤ 100

์ž…์ถœ๋ ฅ ์˜ˆslicenresult
7 10 2
4 12 3

Approach 1 โŒ - ๋‚˜์˜ ์ดˆ๊ธฐ ์ ‘๊ทผ๋ฒ•

class Solution {
    public int solution(int slice, int n) {
        // slice์™€ n๊ณผ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๊ธฐ
        // slice๋ฅผ 2์—์„œ 10๊นŒ์ง€ ์ œํ•œ์„ ์–ด๋–ป๊ฒŒ ๋‘ฌ์•ผ ํ•˜์ง€?
        int gcd = gcd(slice, n);
        int lcd = slice * n / gcd;
        
        return lcd/slice;
    }
    pulbic static int gcd (int a, int b) {
        if (b == 0){return a};
        return gcd(b, a%b);
    }
}

Approach 2 โญ• - ๋‚˜์˜ ์ ‘๊ทผ๋ฒ•์— ๋Œ€ํ•œ ๊ต์ •

๋ฌธ์ œ์  1: ๋ฌธ์ œ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•จ.

๋ฌธ์ œ๋Š” ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜(LCD)๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, n๋ช…์˜ ์‚ฌ๋žŒ์ด ์ตœ์†Œ ํ•œ ์กฐ๊ฐ ์ด์ƒ ๋จน๊ธฐ ์œ„ํ•ด ๋ช‡ ํŒ์˜ ํ”ผ์ž๋ฅผ ์‹œ์ผœ์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ์—์„œ๋Š” slice์™€ n์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ ๋’ค, ์ด๋ฅผ ๋‹ค์‹œ slice๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. 

 

๋ฌธ์ œ์  2: gcd ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ์˜ค๋ฅ˜

์ฝ”๋“œ์—์„œ gcd ๋ฉ”์„œ๋“œ ์„ ์–ธ์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค.

   ์˜คํƒ€๋กœ pulbic์ด๋ผ๊ณ  ์ ์—ˆ๋‹ค. 


Solution ๐Ÿ’ก

๊ฐœ์„  ๋ฐฉ์•ˆ: ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ๋ฒ•์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ

 

๋ฌธ์ œ์˜ ๋ณธ์งˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

1. ํ•œ ํŒ์˜ ํ”ผ์ž์—์„œ slice ๋งŒํผ ์กฐ๊ฐ์„ ์ œ๊ณต.

2. n๋ช…์ด ์ตœ์†Œ ํ•œ ์กฐ๊ฐ์”ฉ ๋จน์œผ๋ ค๋ฉด ํ•„์š”ํ•œ ์ด ์กฐ๊ฐ ์ˆ˜๋Š” n์ด๋‹ค.

3. ํ”ผ์ž๋ฅผ ๋ช‡ ํŒ ์‹œ์ผœ์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ตฌํ•˜๋ ค๋ฉด, ์ด ํ•„์š”ํ•œ ์กฐ๊ฐ ์ˆ˜ n์„ ํ•œ ํŒ์—์„œ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฐ ์ˆ˜ slice๋กœ ๋‚˜๋ˆ„๊ณ , ๋‚˜๋จธ์ง€๊ฐ€ ์žˆ์œผ๋ฉด ํ•œ ํŒ์„ ๋” ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

 

์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค:

class Solution {
   public int solution(int slice, int n) {
       // ํ•œ ์‚ฌ๋žŒ๋‹น ์ตœ์†Œ ํ•œ ์กฐ๊ฐ์„ ๋จน๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํ”ผ์ž ํŒ ์ˆ˜ ๊ณ„์‚ฐ
       return (n + slice -1) / slice; // ์˜ฌ๋ฆผ ์ฒ˜๋ฆฌ
   }
   public static void main(String[] args) {
      Solution solution = new Solution();
      
      System.out.println(solution.solution(7, 10)); //์ถœ๋ ฅ: 2
      System.out.println(solution.solution(4, 12)); //์ถœ๋ ฅ: 3
   }
}

์ฝ”๋“œ ์„ค๋ช…

1. (n + slice - 1) / slice๋Š” ์˜ฌ๋ฆผ(ceiling)์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

   • ์˜ˆ: n=10, slice=7์ธ ๊ฒฝ์šฐ:

        • n / slice๋Š” 10 / 7 = 1.428๋กœ 1์ด์ง€๋งŒ, ์˜ฌ๋ฆผ ์ฒ˜๋ฆฌ๋กœ 2๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.  

        • (n + slice - 1) / slice๋Š” (10 + 7 - 1) / 7 = 16 / 7 = 2๊ฐ€ ๋œ๋‹ค.

  • ์ด ๋ฐฉ๋ฒ•์€ ๋‚˜๋จธ์ง€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•œ ํŒ์„ ์ถ”๊ฐ€ํ•˜๋Š” ํšจ๊ณผ๋ฅผ ์ค€๋‹ค.

 

2. ๋ณ„๋„๋กœ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋‚˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ๋‚˜๋ˆ—์…ˆ๊ณผ ์˜ฌ๋ฆผ ์ฒ˜๋ฆฌ์ด๋‹ค.

 

์™œ  ๋ฌธ์ œ์—์„œ๋Š” slice๋ฅผ 2~10์œผ๋กœ ์ œํ•œ์„ ๋‘์—ˆ๋Š”๋ฐ ์ฝ”๋“œ์—์„œ๋Š” ์ด ์ œํ•œ์„ ๋‘๋Š” ์ฝ”๋“œ๊ฐ€ ์—†๋Š”๊ฑธ๊นŒ?

์‹ค์ œ ์ฝ”๋“œ์— ๊ฒ€์ฆ ๋กœ์ง์ด ๋น ์ ธ์žˆ์–ด์„œ ๊ทธ๋ ‡๋‹ค.

* ์™œ ์ œํ•œ์„ ๋ช…์‹œํ•ด์•ผ ํ•˜๋Š”๊ฐ€? *
1. ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ
๋ฌธ์ œ์—์„œ slice์˜ ๋ฒ”์œ„๋ฅผ 2 ~ 10์œผ๋กœ ์ œํ•œํ–ˆ์œผ๋ฏ€๋กœ, ์ž…๋ ฅ๊ฐ’์ด ์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚  ๊ฒฝ์šฐ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
2. ์•ˆ์ „ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ
์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ž…๋ ฅ๊ฐ’์ด ์˜ˆ์ƒ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•ญ์ƒ ์ž…๋ ฅ๊ฐ’์„ ๊ฒ€์ฆํ•˜์—ฌ ์ฝ”๋“œ์˜ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
class Solution {
   public int solution(int slice, int n) {
      // slice ๊ฐ’ ๊ฒ€์ฆ
      if (slice < 2 || slice > 10) {
          throw new IllegalArgumentException("slice๋Š” 2 ์ด์ƒ 10 ์ดํ•˜์˜ ๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค.");
      }
      
      //ํ•„์š”ํ•œ ํ”ผ์ž ํŒ ์ˆ˜ ๊ณ„์‚ฐ
      return (n + slice -1) /slice ; // ์˜ฌ๋ฆผ ๊ณ„์‚ฐ
   }
   public static void main(String[] args) {
    Solution solution = new Solution();

    // ์ •์ƒ ์ผ€์ด์Šค
    System.out.println(solution.solution(7, 10)); // ์ถœ๋ ฅ: 2
    System.out.println(solution.solution(4, 12)); // ์ถœ๋ ฅ: 3

    // ์˜ˆ์™ธ ์ผ€์ด์Šค
    try {
        System.out.println(solution.solution(1, 10)); // ์˜ˆ์™ธ ๋ฐœ์ƒ
    } catch (IllegalArgumentException e) {
        System.out.println(e.getMessage()); // ์ถœ๋ ฅ: slice๋Š” 2 ์ด์ƒ 10 ์ดํ•˜์˜ ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    }
}
}โ€‹

 

- ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€
  if (slice < 2 || slice > 10)๋ฅผ ํ†ตํ•ด slice๊ฐ€ 2 ๋ฏธ๋งŒ์ด๊ฑฐ๋‚˜ 10 ์ดˆ๊ณผ์ผ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
   • IllegalArgumentException์€ ์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•ด ์ฝ”๋“œ๊ฐ€ ์ค‘๋‹จ๋˜๊ณ , ์ ์ ˆํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ๋‹ค.
-  ๋ฌธ์ œ ํ•ด๊ฒฐ ๋กœ์ง ์œ ์ง€
  ๊ฒ€์ฆ ๋กœ์ง ์ดํ›„ ๊ธฐ์กด์˜ ๊ณ„์‚ฐ ๋ฐฉ์‹์„ ์œ ์ง€ํ•˜๋ฏ€๋กœ, slice ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅผ ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.

Reference ๐Ÿ“„

2024.12.17 - [Java Algorithm Coding Test] - [Java] ํ”ผ์ž ๋‚˜๋ˆ ๋จน๊ธฐ(1)_ ๋ชซ๊ณผ ๋‚˜๋จธ์ง€์— ๋Œ€ํ•œ ๊ทผ๋ณธ์ ์ธ ์›๋ฆฌ ์‚ฌ์šฉ

 

[Java] ํ”ผ์ž ๋‚˜๋ˆ ๋จน๊ธฐ(1)_ ๋ชซ๊ณผ ๋‚˜๋จธ์ง€์— ๋Œ€ํ•œ ๊ทผ๋ณธ์ ์ธ ์›๋ฆฌ ์‚ฌ์šฉ

Problem ๐Ÿ’ปhttps://school.programmers.co.kr/learn/courses/30/lessons/120814๋ฌธ์ œ ์„ค๋ช…๋จธ์“ฑ์ด๋„ค ํ”ผ์ž๊ฐ€๊ฒŒ๋Š” ํ”ผ์ž๋ฅผ ์ผ๊ณฑ ์กฐ๊ฐ์œผ๋กœ ์ž˜๋ผ ์ค๋‹ˆ๋‹ค. ํ”ผ์ž๋ฅผ ๋‚˜๋ˆ ๋จน์„ ์‚ฌ๋žŒ์˜ ์ˆ˜ n์ด ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์‚ฌ๋žŒ์ด ํ”ผ์ž๋ฅผ ํ•œ

yeonbikim.tistory.com

 

์œ„ ๋ฌธ์ œ์™€ ์–ด๋–ค ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์ ์ด ์žˆ์„๊นŒ?

๊ณตํ†ต์ 

1. ๊ธฐ๋ณธ ๋ฌธ์ œ ๊ตฌ์กฐ

๋‘ ๋ฌธ์ œ ๋ชจ๋‘ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ”ผ์ž์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

ํ”ผ์ž๋ฅผ ์ผ์ •ํ•œ ์กฐ๊ฐ ์ˆ˜๋กœ ๋‚˜๋ˆ„๊ณ , ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ตœ์†Œ ํ•œ ์กฐ๊ฐ ์ด์ƒ ๋จน์„ ์ˆ˜ ์žˆ๋„๋ก ๊ณ„์‚ฐํ•˜๋Š” ์ ์—์„œ ๋™์ผํ•˜๋‹ค.

 

2. ์ˆ˜ํ•™์  ์ ‘๊ทผ ๋ฐฉ์‹

๋‘ ๋ฌธ์ œ ๋ชจ๋‘ ํ•„์š”ํ•œ ์กฐ๊ฐ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ”ผ์ž ํŒ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉฐ, ํ•„์š”ํ•œ ์กฐ๊ฐ ์ˆ˜๋ฅผ ํ•œ ํŒ์˜ ์กฐ๊ฐ ์ˆ˜๋กœ ๋‚˜๋ˆ„๊ณ  ์˜ฌ๋ฆผ(ceil) ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐ๋œ๋‹ค.

 

3. ์ œํ•œ ์กฐ๊ฑด

๋‘ ๋ฌธ์ œ ๋ชจ๋‘ ์ž…๋ ฅ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ์ž‘์•„, ๋‹จ์ˆœํ•œ ์ •์ˆ˜ ์—ฐ์‚ฐ์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.


์ฐจ์ด์ 

1. ํ”ผ์ž์˜ ์กฐ๊ฐ ์ˆ˜

  • ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ํ”ผ์ž์˜ ์กฐ๊ฐ ์ˆ˜ slice๊ฐ€ ๋ณ€์ˆ˜๋กœ ์ œ๊ณต๋˜๋ฉฐ, 2 ~ 10 ์‚ฌ์ด์˜ ๊ฐ’์œผ๋กœ ๋™์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ํ”ผ์ž์˜ ์กฐ๊ฐ ์ˆ˜๊ฐ€ ํ•ญ์ƒ 7์กฐ๊ฐ์œผ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค.

 

2. ๋งค๊ฐœ๋ณ€์ˆ˜

  • ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” solution(int slice, int n)์™€ ๊ฐ™์ด ์กฐ๊ฐ ์ˆ˜(slice)์™€ ์ธ์› ์ˆ˜(n) ๋‘ ๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค.

  • ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” solution(int n)์™€ ๊ฐ™์ด ์ธ์› ์ˆ˜(n) ํ•˜๋‚˜๋งŒ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.

 

3. ๋ฌธ์ œ์˜ ์ผ๋ฐ˜์„ฑ๊ณผ ํŠน์ˆ˜์„ฑ

  • ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ํ”ผ์ž ์กฐ๊ฐ ์ˆ˜๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์„ ๋‹ค๋ฃจ๋Š” ๋ฌธ์ œ์ด๋‹ค.

  • ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ํ”ผ์ž ์กฐ๊ฐ ์ˆ˜๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํŠน์ •ํ•œ ์ƒํ™ฉ์„ ๋‹ค๋ฃจ๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

4. ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐํ•จ

  • ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” slice๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์•ผ ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ๊ฐ€ ์•ฝ๊ฐ„ ๋” ๋ณต์žกํ•˜๋‹ค.

  • ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” slice = 7์ด ๊ณ ์ •๋˜์–ด ์žˆ์–ด ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๋‹จํ•˜๋‹ค.

 


๋‘ ๋ฌธ์ œ์˜ ์ฝ”๋“œ ๋น„๊ต

 

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ

class Solution {
   public int solution(int slice, int n) {
      return (n + slice -1) / slice; // ์˜ฌ๋ฆผ ๊ณ„์‚ฐ
   }
}

 

๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ

class Solution {
   public int solution(int n) {
       int slice = 7;
       return (n + slice -1) / slice; //์˜ฌ๋ฆผ ๊ณ„์‚ฐ
   }
}

+ Recent posts