(해결)정수론 #1978 자바코드로는 통과, 파이선으로는 통과가 안돼요...
+) 자바코드로는 통과했습니다. 파이썬코드로는 왜 통과를 못하는 걸까요?ㅠㅠ
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
아래 같이 수정해서 파이선 코드도 성공했습니다.
자바는 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)
이렇게 코드를 수정하시고 다시 테스트를 진행해보세요. 문제가 해결되길 바랍니다!
dp[x]가 최대값이라고 확신할수 있는 이유
0
45
1
1090번 문제 질문
0
150
1
유니온파인드
0
112
1
투포인터 25:15 질문
1
128
1
#1090번 문제 반례가 궁금합니다.
0
148
1
예제코드 자바입니다
1
186
1
정수론 파트 #2247 문제에 대한 질문입니다!
0
102
0
코드 오류
0
185
1
2강 정수론 문제3 #1407 질문
0
127
0
이차원 배열 (int형)dp로 0 혹은 -1로 체크하는 방법 말고 boolean형 배열로 체크해서 바로 리턴해줄 수 없나요?
0
154
0
1717번 최적화
0
112
0
백준 22988 문제 질문
1
193
2
[Python] 백준 1090번 문제
1
226
3
강의자료에서
1
162
2
2503 문제 제한 조건 질문!
1
249
2
백준 22988 번 문제
1
193
1
추가 강의 순서
1
180
2
(*문제 풀이)1090 테스트케이스 1번 C++
1
221
2
7강 RGB 색칠하기 질문 있습니다.
1
160
2
정수론 약수 빠르게 구하기 질문
1
257
1
1090 문제의 2, 3번째 아이디어는 결국 같은거 아닌가요?
1
373
2
1090 문제 관련하여 맨해튼 거리 최솟값에 대해 질문 있습니다.
1
223
2
누적합 문제 3번 질문
1
216
2
기억 ( 누적합 ) 강의 11660 문제
1
163
2





