
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) → ๋ด๋ฆผ๊ฐ ๋ฐํ.
'๐ฐ๐ท ํ๊ตญ์ด (Korean) > Java Algorithm Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Java] ๋ชจ์ ์ ๊ฑฐ (0) | 2024.12.30 |
|---|---|
| [Java] ์ผ๊ฐํ์ ์์ฑ์กฐ๊ฑด (0) | 2024.12.29 |
| [Java] ํน์ ๋ฌธ์ ์ ๊ฑฐํ๊ธฐ (0) | 2024.12.29 |
| [Java] 10์ ๋ฐฐ์์ ์์ผ ๋ ๋ง๋ค ์ผ์ ์๊ฐ ๊น์ด๋ ๋ฌธ์ . (1) | 2024.12.26 |
| [Java] n๋ณด๋ค ์์ ์ง์๋ผ๋ฆฌ ๋ชจ๋ ๋ํ๊ธฐ (0) | 2024.12.26 |