해결된 질문
작성
·
371
·
수정됨
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)
이렇게 코드를 수정하시고 다시 테스트를 진행해보세요. 문제가 해결되길 바랍니다!
넵 항상 강의 잘 보고있습니다! 도움이 많이됩니다!ㅎㅎ