Problem ๐Ÿ’ป

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

 

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

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

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

์–ด๋–ค ์ž์—ฐ์ˆ˜๋ฅผ ์ œ๊ณฑํ–ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” ์ •์ˆ˜๋ฅผ ์ œ๊ณฑ์ˆ˜๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ •์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, n์ด ์ œ๊ณฑ์ˆ˜๋ผ๋ฉด 1์„ ์•„๋‹ˆ๋ผ๋ฉด 2๋ฅผ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ
  • 1 ≤ n ≤ 1,000,000

์ž…์ถœ๋ ฅ ์˜ˆnresult
144 1
976 2

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • 144๋Š” 12์˜ ์ œ๊ณฑ์ด๋ฏ€๋กœ ์ œ๊ณฑ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1์„ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • 976์€ ์ œ๊ณฑ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 2๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.

Approach 1 โŒ

์ œ๊ณฑ์ˆ˜๋ฅผ ๋‹ค๋ฃจ๋Š” ์ฝ”๋“œ๋ฅผ ์•„์˜ˆ ๋ชฐ๋ผ์„œ ๊ฐ์„ ๋ชป ์žก๊ฒ ๋‹ค...


Approach 2 โญ•

1. ๋ฌธ์ œ์˜ ๋ณธ์งˆ ์ดํ•ด

  ์–ด๋–ค ์ž์—ฐ์ˆ˜ n์ด ์ œ๊ณฑ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๋ผ๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ œ๊ณฑ์ˆ˜๋ž€ ์–ด๋–ค ์ •์ˆ˜๋ฅผ ์ œ๊ณฑํ–ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ: 12^2 = 144, 25 = 5^2.

์กฐ๊ฑด: ์ฃผ์–ด์ง„ ์ •์ˆ˜ n์ด ์ œ๊ณฑ์ˆ˜๋ผ๋ฉด 1์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์•„๋‹ˆ๋ฉด 2๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

 

2. ์ œ๊ณฑ์ˆ˜ ํŒ๋ณ„์˜ ๋…ผ๋ฆฌ

  ์ œ๊ณฑ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ํ•ต์‹ฌ์€ ์ œ๊ณฑ๊ทผ์„ ๊ณ„์‚ฐํ•˜์—ฌ ๊ทธ๊ฒƒ์ด ์ •์ˆ˜์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Math.sqrt(n)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด n์˜ ์ œ๊ณฑ๊ทผ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  ์˜ˆ: Math.sqrt(144) = 12.0 (์ •์ˆ˜)

 ์˜ˆ: Math.sqrt(976) = 31.240 (์ •์ˆ˜๊ฐ€ ์•„๋‹˜)

์ œ๊ณฑ๊ทผ์ด ์ •์ˆ˜๋ผ๋ฉด, n์€ ์ œ๊ณฑ์ˆ˜์ด๋‹ค.

 

3. ์‚ฌ์šฉ๋œ ๊ฐœ๋…

์ œ๊ณฑ๊ทผ (Square Root):

์–ด๋–ค ์ˆ˜์˜ ์ œ๊ณฑ๊ทผ์€ ๊ทธ ์ˆ˜๋ฅผ ๊ณฑํ•ด์„œ ์›๋ž˜ ๊ฐ’์„ ์–ป๋Š” ์ˆซ์ž์ž…๋‹ˆ๋‹ค.

์˜ˆ: 16์˜ ์ œ๊ณฑ๊ทผ์€ 4์ž…๋‹ˆ๋‹ค (4^2 = 16).

์ •์ˆ˜ ํŒ๋ณ„:

์‹ค์ˆ˜ ๊ฐ’์„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒฐ๊ณผ์™€ ์›๋ž˜ ๊ฐ’์ด ๊ฐ™์€์ง€ ๋น„๊ตํ•˜๋ฉด ์ •์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ: Math.sqrt(144) = 12.0 → ์ •์ˆ˜.

์˜ˆ: Math.sqrt(976) = 31.240 → ์ •์ˆ˜๊ฐ€ ์•„๋‹˜.


Solution ๐Ÿ’ก

class Solution {
   public int solution (int n) {
      //n์˜ ์ œ๊ณฑ๊ทผ์„ ๊ตฌํ•œ๋‹ค.
      double sqrt = Math.sqrt(n);
      //์ œ๊ณฑ๊ทผ์ด ์ •์ˆ˜์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
      if (sqrt == (int) sqrt) {
          return 1; //์ œ๊ณฑ์ˆ˜๋ผ๋ฉด 1๋ฐ˜ํ™˜
      } else {
          return 2; // ์ œ๊ณฑ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด 2๋ฐ˜ํ™˜
      }
   }
   public static void main(String[] args) {
      Solution sol = new Solution();
      System.out.println(sol.solution(144)); //์ถœ๋ ฅ:1
   }
}

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

1. Math.sqrt(n): ์ฃผ์–ด์ง„ ์ˆซ์ž n์˜ ์ œ๊ณฑ๊ทผ์„ ๊ณ„์‚ฐํ•œ๋‹ค.

2. (int) sqrt: ๊ณ„์‚ฐ๋œ ์ œ๊ณฑ๊ทผ์„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

3. sqrt == (int) sqrt: ์ œ๊ณฑ๊ทผ์ด ์ •์ˆ˜์ธ์ง€ ํ™•์ธํ•˜์—ฌ ์ œ๊ณฑ์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋ณ„ํ•œ๋‹ค.

4. ๊ฒฐ๊ณผ๋ฅผ 1 ๋˜๋Š” 2๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


Reference ๐Ÿ“„ - Math.sqrt(n) ์ด๋ž€?

Math.sqrt(n)์€ Java์˜ Math ํด๋ž˜์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ,

์ฃผ์–ด์ง„ ์ˆซ์ž n์˜ ์ œ๊ณฑ๊ทผ(Square Root)์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

1. Math.sqrt ๋ฌธ๋ฒ•

Math.sqrt(double n)

 

๋งค๊ฐœ๋ณ€์ˆ˜ (Parameter):

   n: ์ œ๊ณฑ๊ทผ์„ ๊ณ„์‚ฐํ•˜๋ ค๋Š” ์ˆซ์ž.

   ํƒ€์ž…์€ double์ด์–ด์•ผ ํ•œ๋‹ค.

   n์€ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค. ์Œ์ˆ˜๋ฅผ ๋„ฃ์œผ๋ฉด NaN (Not a Number)์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’ (Return Value):

  ์ฃผ์–ด์ง„ ์ˆซ์ž n์˜ ์ œ๊ณฑ๊ทผ์„ double ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

2. ๋™์ž‘ ๋ฐฉ์‹

์ œ๊ณฑ๊ทผ ๊ณ„์‚ฐ:

 (4์˜ ์ œ๊ณฑ๊ทผ์€ 2)

 (16์˜ ์ œ๊ณฑ๊ทผ์€ 4)

์ •ํ™•ํ•œ ๊ณ„์‚ฐ:

๋ฐ˜ํ™˜๊ฐ’์€ ์†Œ์ˆ˜์ ๊นŒ์ง€ ํฌํ•จํ•˜๋Š” double ํƒ€์ž…์ด๋‹ค.

์Œ์ˆ˜ ์ž…๋ ฅ ์‹œ:

์Œ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋ฉด NaN์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

์˜ˆ: .

 

3. ์˜ˆ์ œ ์ฝ”๋“œ

 

public class Main {
    public static void main(String[] args) {
        // ์–‘์ˆ˜์˜ ์ œ๊ณฑ๊ทผ
        System.out.println(Math.sqrt(25)); // ์ถœ๋ ฅ: 5.0
        
        // ์‹ค์ˆ˜์˜ ์ œ๊ณฑ๊ทผ
        System.out.println(Math.sqrt(20.25)); // ์ถœ๋ ฅ: 4.5
        
        // ์Œ์ˆ˜์˜ ์ œ๊ณฑ๊ทผ
        System.out.println(Math.sqrt(-4)); // ์ถœ๋ ฅ: NaN
        
        // ์ œ๊ณฑ๊ทผ ๊ฒฐ๊ณผ ์ €์žฅ
        double result = Math.sqrt(144);
        System.out.println(result); // ์ถœ๋ ฅ: 12.0
    }
}

 

4. ํ™œ์šฉ ์˜ˆ

์ œ๊ณฑ์ˆ˜ ํŒ๋ณ„:

   Math.sqrt๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ˆ˜์ธ์ง€ ํ™•์ธ.

์ˆ˜ํ•™ ๊ณ„์‚ฐ:

   ์‚ผ๊ฐํ˜•์˜ ๋น—๋ณ€ ๊ธธ์ด ๊ณ„์‚ฐ ().

๋ฌผ๋ฆฌ ๊ณ„์‚ฐ:

   ์ž์œ  ๋‚™ํ•˜ ์†๋„, ๊ฑฐ๋ฆฌ ๊ณต์‹ ๋“ฑ์— ์‚ฌ์šฉ.

 

5. ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ

1. double ๋ฐ˜ํ™˜:

๋ฐ˜ํ™˜๊ฐ’์ด ํ•ญ์ƒ double ํƒ€์ž…์ด๋ฏ€๋กœ, ํ•„์š”ํ•˜๋‹ค๋ฉด int๋กœ ํ˜• ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

   ์˜ˆ: (int) Math.sqrt(25) → 5.

2. ์Œ์ˆ˜ ์ฒ˜๋ฆฌ:

์Œ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋ฉด NaN์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ, ์Œ์ˆ˜ ์ž…๋ ฅ์„ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

 ์กฐ๊ฑด๋ฌธ ์˜ˆ:

if (n < 0) {
    System.out.println("์Œ์ˆ˜๋Š” ์ œ๊ณฑ๊ทผ์„ ๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
}

 

3. ์ •์ˆ˜ ํŒ๋ณ„:

๊ฒฐ๊ณผ๊ฐ€ ์ •์ˆ˜์ธ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด (int)๋กœ ๋ณ€ํ™˜ํ•œ ๊ฐ’๊ณผ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ:

double sqrt = Math.sqrt(49);
if (sqrt == (int) sqrt) {
    System.out.println("์ •์ˆ˜์ž…๋‹ˆ๋‹ค.");
}

 

6. Math.sqrt์™€ ๋‹ค๋ฅธ Math ๋ฉ”์„œ๋“œ

Math ํด๋ž˜์Šค๋Š” sqrt ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ์ˆ˜ํ•™ ์—ฐ์‚ฐ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค:

Math.pow(a, b)  ๊ณ„์‚ฐ (์ œ๊ณฑ).

Math.abs(n) → ์ ˆ๋Œ“๊ฐ’ ๋ฐ˜ํ™˜.

Math.ceil(n) → ์˜ฌ๋ฆผ๊ฐ’ ๋ฐ˜ํ™˜.

Math.floor(n) → ๋‚ด๋ฆผ๊ฐ’ ๋ฐ˜ํ™˜.

 

 

+ Recent posts