[프로그래머스 코딩테스트 연습문제] 소수 만들기 문제 풀이 with 자바스크립트(Javascript) & 자바(Java)

Re_Go·2024년 7월 1일
0

코딩테스트연습

목록 보기
89/106
post-thumbnail

1. 첫번째 문제 풀이(2024-07-01)

해당 문제 는 제가 예전에 풀었던 소수 찾기 문제경우의 수 문제를 참고했습니다.

문제의 핵심은 숫자 세 개를 빠짐 없이 더하는 루프와, 소수를 구하는 함수인데요. 0과 1은 소수가 아니기 때문에 함수의 for문 시작점은 2부터 세 자리수의 제곱근까지의 범위로 설정하고, 나누어 떨어지지 않는 경우 result를 누적 증가 시켜주는 방식으로 문제를 풀었습니다.

그럼 해당 공식을 적용한 자바스크립트 버전을 소개해 드리겠습니다.

  1. 자바스크립트 버전
// 소수를 구하는 함수
function isPrime(sum){
  	// 0과 1은 제외이므로 false를 반환
    if(sum === 0 || sum === 1) return false;

  	// 2부터 세 자리수의 합의 제곱근 까지 연산을 하면서 차례대로 sum을 나눌 때 0으로 나누어 떨어지면 소수가 아니므로 false를 반환
    for(let i = 2 ; i <= Math.sqrt(sum) ; i++){
        if(sum%i === 0) return false;
    }
    // 위의 조건들에 걸리지 않으면 소수이므로 true를 반환
    return true;
}

function solution(nums) {
  	// 반환할 result값
    let result = 0;
  	// 

  	// 3중 for문
    for(let i = 0; i < nums.length ; i++){
        for(let j = i+1; j < nums.length ; j++){
            for(let k = j+1; k < nums.length ; k++){
               let sum = nums[i] + nums[j] + nums[k];
                if(isPrime(sum)) result++;
            }
        }
    }
    return result
}

그리고 자바 버전으로 구현한 코드는 다음과 같습니다.

  1. 자바 버전
public class Solution {
    // 소수를 판별하는 함수
    public boolean isPrime(int sum) {
        // 0과 1은 소수가 아니므로 false 반환
        if (sum == 0 || sum == 1) return false;

        // 제곱근까지만 반복하여 소수 판별
        for (int i = 2; i <= Math.sqrt(sum); i++) {
            if (sum % i == 0) return false; // 나누어 떨어지면 소수가 아님
        }

        // 위 조건에 해당하지 않으면 소수이므로 true 반환
        return true;
    }

    // 솔루션 메소드
    public int solution(int[] nums) {
        int result = 0;

        // 3중 for문으로 조합 구하기
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                for (int k = j + 1; k < nums.length; k++) {
                    int sum = nums[i] + nums[j] + nums[k];
                    if (isPrime(sum)) result++;
                }
            }
        }
       
        return result;
    }
}

2. 자바와 자바스크립트 풀이 차이점

  1. JS의 경우 배열에 유동적인 접근이 가능하지만, 자바의 경우 문자열과 문자를 취급하는 메서드가 각각 달라 꽤 애를 먹은 기억이 있습니다. 특히나 valueOf나 indexOf의 메서드는 각각 취급하는 매개 변수의 타입이 달라 특히나 더 헷갈렸든 듯 합니다.

  2. 사실 이번 문제는 로직이 동일해서 JS와 자바 둘 다 별 무리없이 풀었는데요. 다만 소수를 구하는 다른 방법이나, 다중 for문 말고 다른 방법으로 경우의 수를 구하는 방법을 찾아볼 필요가 있겠다고 느꼈던 문제였습니다.

profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글