인프런 커뮤니티 질문&답변
(해결)정수론 #1978 자바코드로는 통과, 파이선으로는 통과가 안돼요...
해결된 질문
작성
·
451
·
수정됨
1
+) 자바코드로는 통과했습니다. 파이썬코드로는 왜 통과를 못하는 걸까요?ㅠㅠ
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
       Scanner s = new Scanner(System.in);
        int N = s.nextInt();
        int [] num = new int[N];
        int cnt = 0;
        for(int i = 0; i<N; i++){
            num[i] = s.nextInt();
            if(num[i] == 1) continue;
            int j;
            for( j= 1; j<(int)Math.sqrt(num[i])+1; j++){
                if((num[i] % j == 0) & (j != 1)) break;
            }
            if(j == (int)Math.sqrt(num[i])+1) cnt += 1;
        }
        System.out.println(cnt);
    }
}
파이선은 백준에 제출했는데 틀렸다고 나옵니다... 제 알고리즘에 문제를 찾아주실 수 있나요?ㅠㅠ
import math
#약수 빠르게 구하기(n의 제곱근까지만 구하기)
#1978
N = int(input())
num = list(map(int, input().split())) 
cnt = 0
for i in range(len(num)):
    if num[i] == 1:
        continue
    for j in range(1, int(math.sqrt(num[i])+1)):
        if ((num[i] % j == 0) & (j != 1)):
            break
     
    if (j*j != num[i]) & (j == int(math.sqrt(num[i]))):
        cnt += 1
print(cnt)답변 3
1
1
다롱이
질문자
아래 같이 수정해서 파이선 코드도 성공했습니다.
자바는 for문 마지막에 j가 증가하고 끝나는데 파이선은 그렇지 않아서 조건문에 j -= 1를 추가해서 해결했습니다.
import math
#약수 빠르게 구하기(n의 제곱근까지만 구하기)
#1978
N = int(input())
num = list(map(int, input().split())) 
cnt = 0
for i in range(N):
    if num[i] == 1:
        continue
    
    j = 0
    for j in range(1, int(math.sqrt(num[i]))+1):
        if ((num[i] % j == 0) and (j != 1)): #1외에 나누어떨어지는 수가 있다면 소수x
            # print(num[i], j)
            j -= 1
            break
    
    # print(num[i], j)
    if ( (j == int(math.sqrt(num[i]))) and (num[i] != (j*j))):
        # print(num[i], j)
        cnt += 1
print(cnt)0
안녕하세요 다롱이 님, 인프런 AI 인턴이에요.
자바 코드와 파이썬 코드를 비교해보니 약간의 차이가 있습니다. 자바 코드에서는 (num[i] % j == 0) & (j != 1)로 조건을 검사하고 있는 반면, 파이썬 코드에서는 (num[i] % j == 0) & (j != 1)가 될 때 break를 실행하고 있습니다.
파이썬에서의 비트 연산자 AND는 앰퍼샌드(&)입니다. 하지만 파이썬에서 논리 연산자 AND는 엠퍼샌드(and)입니다. 따라서, 파이썬 코드에서는 (num[i] % j == 0) and (j != 1)로 조건을 검사해야 합니다.
다음과 같이 수정하면 파이썬 코드가 정상적으로 동작할 수 있을 것입니다.
import math
N = int(input())
num = list(map(int, input().split()))
cnt = 0
for i in range(len(num)):
    if num[i] == 1:
        continue
    for j in range(2, int(math.sqrt(num[i])+1)):
        if (num[i] % j == 0):
            break
    if (j*j != num[i]) and (j == int(math.sqrt(num[i]))):
        cnt += 1
print(cnt)
이렇게 코드를 수정하시고 다시 테스트를 진행해보세요. 문제가 해결되길 바랍니다!






넵 항상 강의 잘 보고있습니다! 도움이 많이됩니다!ㅎㅎ