โค๏ธ ๋ฌธ์ ์ค๋ช
์ฃผ์ด์ง ์ซ์ ์ค 3๊ฐ์ ์๋ฅผ ๋ํ์ ๋ ์์๊ฐ ๋๋ ๊ฒฝ์ฐ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ค๊ณ ํฉ๋๋ค. ์ซ์๋ค์ด ๋ค์ด์๋ ๋ฐฐ์ด nums๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, nums์ ์๋ ์ซ์๋ค ์ค ์๋ก ๋ค๋ฅธ 3๊ฐ๋ฅผ ๊ณจ๋ผ ๋ํ์ ๋ ์์๊ฐ ๋๋ ๊ฒฝ์ฐ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๐ ์ ํ์ฌํญ
- nums์ ๋ค์ด์๋ ์ซ์์ ๊ฐ์๋ 3๊ฐ ์ด์ 50๊ฐ ์ดํ์ ๋๋ค.
- nums์ ๊ฐ ์์๋ 1 ์ด์ 1,000 ์ดํ์ ์์ฐ์์ด๋ฉฐ, ์ค๋ณต๋ ์ซ์๊ฐ ๋ค์ด์์ง ์์ต๋๋ค.
๐ ์ถ๋ ฅ ์์
โ
๐ ํ์ด
์ฒซ๋ฒ์งธ ์๋ ๐ ๐ปโ๏ธ - ํ๋ฆผ
class Solution {
public int solution(int[] nums) {
int count = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length; j++) {
for (int k = 0; k < nums.length; k++) {
int num = nums[i] + nums[j] + nums[k];
if (isPrime(num)) count++;
}
}
}
return count;
}
public boolean isPrime(int num) {
if (num == 2) return true;
for ? // ์ฌ๊ธฐ์ ์์ ํ๋ณํ๋ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์ง์ผ ํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค
}
}
์ผ๋จ ์์ ํ๋ณ ๋ฉ์๋ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์๋ค.
์์๋ 1๊ณผ ์๊ธฐ ์์ ์ผ๋ก๋ง ๋๋์ด ๋จ์ด์ง๋ ์ ์๋ฅผ ๋งํ๋๋ฐ,
์ํ์ ์ผ๋ก๋ ์ซ์ num์ด ์์์ธ์ง ํ์ธํ๊ธฐ ์ํด ๋ชจ๋ ์๋ฅผ ๋๋ ํ์ ์์ด, num์ ์ ๊ณฑ๊ทผ๊น์ง๋ง ํ์ธํ๋ฉด ๋จ.
์๋ฅผ ๋ค์ด์, 36์ ์ฝ์๋ค์ (1, 36), (2, 18), (3, 12), (4, 9), (6, 6)๊ณผ ๊ฐ์ด ์ง์ ์ด๋ฃจ๊ธฐ ๋๋ฌธ์,
์ฝ์ ์ค ์ ๊ณฑ๊ทผ ์ดํ๋ง ํ์ธํด๋ ์ ์ฒด ์ฝ์๋ฅผ ์ ์ ์๋ค. ์๋ํ๋ฉด ์ ๊ณฑ๊ทผ ์ด์์ ์ด์ฐจํผ ์๋ค ์ซ์๋ง ๋ฐ๋ ์กฐํฉ์ด๊ธฐ ๋๋ฌธ
๊ทธ๋์ num์ด ์์๋ผ๋ฉด, ์ ๊ณฑ๊ทผ ์ดํ์ ์๋ค ์ค num์ ๋๋์ด๋จ์ด์ง๊ฒ ํ๋ ์๊ฐ ์์ด์ผ ํ๋ค.
์ผ๋จ num์ด 1์ด๋ฉด ์์๊ฐ ์๋๋ค.
for ๋ฐ๋ณต๋ฌธ์์ i๋ 2๋ถํฐ ์์ํ์ฌ Math.sqrt(num)๊น์ง ์ฆ๊ฐํ๋ฉฐ, num์ i๋ก ๋๋์์ ๋ ๋๋จธ์ง๊ฐ 0์ธ์ง ํ์ธํด์ผ ํ๋ค.
๋ง์ฝ num % i == 0์ด๋ผ๋ฉด, num์ด i๋ก ๋๋์ด๋จ์ด์ง๋ค๋ ๋ป์ด๋ฏ๋ก, ์์๊ฐ ์๋๋ผ๋ ๋ป.
public boolean isPrime(int num) {
if (num <= 1) return false; // 1 ์ดํ์ ์ซ์๋ ์์๊ฐ ์๋
for (int i = 2; i <= (int) Math.sqrt(num); i++) {
if (num % i == 0) {
return false; // ๋๋์ด๋จ์ด์ง๋ ์๊ฐ ์์ผ๋ฉด ์์๊ฐ ์๋
}
}
return true; // ์์์ธ ๊ฒฝ์ฐ
}
๋๋ฒ์งธ ์๋ ๐
๐ปโ๏ธ - ํ๋ฆผ
class Solution {
public int solution(int[] nums) {
int count = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length; j++) {
for (int k = 0; k < nums.length; k++) {
int num = nums[i] + nums[j] + nums[k];
if (isPrime(num)) count++;
}
}
}
return count;
}
public boolean isPrime(int num) {
if (num <= 1) return false;
for (int i = 2; i <= (int) Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
- isPrime ๋ฉ์๋ ์๋์ฒ๋ผ ์์ ํด ๋ณด๊ธฐ๋ก ํจ.
num์ด 1 ์ธ๊ฒฝ์ฐ, 2์ธ ๊ฒฝ์ฐ, ๊ทธ ์ด์์ธ ๊ฒฝ์ฐ ๋๋์ด์ ์ํ
1์ ํฌํจ ์๋๊ณ , 2๋ ์์์ด๊ณ , 3๋ถํฐ๋ ํฌ๋ฌธ ๋๋ ค์ผ ํ๊ธฐ ๋๋ฌธ
public boolean isPrime(int num) {
if (num <= 1) return false; // 1 ์ดํ์ ์ซ์๋ ์์๊ฐ ์๋
if (num == 2) return true; // 2๋ ์์
for (int i = 2; i <= (int) Math.sqrt(num); i++) {
if (num % i == 0) {
return false; // ๋๋์ด ๋จ์ด์ง๋ฉด ์์๊ฐ ์๋
}
}
return true; // ์์์ธ ๊ฒฝ์ฐ
}
- 3์ค ํฌ๋ฌธ์ ์ธ๋ฑ์ค ๋ฌธ์
- i๋ 0๋ถํฐ ์์ํด์ nums.length - 2๊น์ง๋ง ๋ฐ๋ณตํจ. i๋ ์ฒซ ๋ฒ์งธ ์ซ์์ ์ธ๋ฑ์ค์ด๋ฏ๋ก ๋ค์ ๋ ๊ฐ์ ์ซ์๋ฅผ ์ถ๊ฐ๋ก ์ ํํ ์ ์์ด์ผ ํจ. ๋ฐ๋ผ์, nums.length - 2๊น์ง๋ง ๋ฐ๋ณตํ๊ฒ ๋จ
- j๋ i + 1๋ถํฐ ์์ nums.length - 1๊น์ง๋ง ๋ฐ๋ณต. ์ด๋ ๊ฒ ํด์ผ j๊ฐ i์ ์ค๋ณต์๋จ. j๋ ๋ ๋ฒ์งธ ์ซ์์ ์ธ๋ฑ์ค์ด๋ฏ๋ก, i ๋ค์ ์์น์์ ์์ํด์ผ ํ๊ณ , ๋ค์ ์ธ ๋ฒ์งธ ์ซ์ k๋ฅผ ์ ํํ ์ ์์ด์ผ ํ๋ฏ๋ก nums.length - 1๊น์ง๋ง ๋ฐ๋ณตํด์ผ ํจ.
- k๋ j + 1๋ถํฐ ์์ํ์ฌ nums.length๊น์ง ๋ฐ๋ณต. k๋ ์ธ ๋ฒ์งธ ์ซ์์ ์ธ๋ฑ์ค์ด๋ฏ๋ก, j ๋ค์ ์์น์์ ์์ํด์ผ ํจ
์ด๋ ๊ฒ ํด์ผ i, j, k ์ธ ๊ฐ์ ์ซ์๋ฅผ ๋ฐ๋ณตํ์ง ์๊ณ ์กฐํฉ์ ํ์ํ ์ ์์.
public int solution(int[] nums) {
int count = 0;
for (int i = 0; i < nums.length - 2; i++) {
for (int j = i + 1; j < nums.length - 1; j++) {
for (int k = j + 1; k < nums.length; k++) {
int num = nums[i] + nums[j] + nums[k];
if (isPrime(num)) count++;
}
}
}
return count;
}
์ธ๋ฒ์งธ ์๋ ๐โ๏ธ - ์ ๋ต๐ฅณ
class Solution {
public int solution(int[] nums) {
int count = 0;
for (int i = 0; i < nums.length - 2; i++) {
for (int j = i + 1; j < nums.length - 1; j++) {
for (int k = j + 1; k < nums.length; k++) {
int num = nums[i] + nums[j] + nums[k];
if (isPrime(num)) count++;
}
}
}
return count;
}
public boolean isPrime(int num) {
if (num <= 1) return false; // 1 ์ดํ์ ์ซ์๋ ์์๊ฐ ์๋
if (num == 2) return true; // 2๋ ์์
for (int i = 2; i <= (int) Math.sqrt(num); i++) {
if (num % i == 0) {
return false; // ๋๋์ด ๋จ์ด์ง๋ฉด ์์๊ฐ ์๋
}
}
return true; // ์์์ธ ๊ฒฝ์ฐ
}
}