python

[python] 백준 6219 소수의 자격 *리스트 초기화*

vhxpffltm 2020. 4. 27. 22:30

https://www.acmicpc.net/problem/6219

 

문제의 출처는 위에 있다. 

 

이 문제로 python에서 우리가 원하는 비어있는 배열과 range에 대해서 조금 알아볼 수 있다.

 

range()의 괄호안에는 다들 알다시피 최대 3개의 파라미터를 사용할 수 있다.

([시작 인덱스],[마지막 인덱스], [증가/감소 값]) 이정도는 누구나 알 수 있다. 해답 코드를 보면 이해할 것이다.

 

그리고 소수를 구하기 위한 초기화된 배열이 필요할테인데 파이썬의 경우,

 

[0] * [크기] 와 같이 나타낼 수 있다. 후의 2차원 배열 역시 '[[0]*10]*10' 와 같이 초기화 할 수 있다.

 

코드를 돌려보면 바로 이해할 수 있다.

 

 

1
2
3
4
5
6
7
8
9
arr = [0* 10
print(arr)
arr2 = [[0]*10]*10
for i in range(10):
    for j in range(10):
        print(arr2[i][j],end=" ")
    print()
arr3 = [i for i in range(10)]
print(arr3)
 

 

그래서 이 문제는 에라토스테네스의 체를 구현하도 문제에서 요구하는 답을 구하면 된다.

 

2020/05/18

파이썬에서 2차원 리스트를 초기화할 때 주의할게 있다.

아래 코드를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
= [[0* 3* 5
= [[0* 3 for i in range(5)]
= [[0 for _ in range(3)] for _ in range(5)]
 
a[1][1],b[1][1],c[1][1=1,1,1
 
for i in range(5):
    for j in range(3):
        print(a[i][j],end=" ")
    print()
 
print()
for i in range(5):
    for j in range(3):
        print(b[i][j],end=" ")
    print()
print()
for i in range(5):
    for j in range(3):
        print(c[i][j],end=" ")
    print()
cs

이 코드를 실행해보면 뭔가 차이가 있다. 

for문으로 초기화하지 않은 변수에서 [0]*상수는 모두 같은 객체로 인식된다, 그렇기 떄문에 값을 수정해야하는 변수의 경우, for문을 사용한 초기화에 익숙해져야 한다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
 
def f(num,num2):
    num ,chk= str(num),0
    for i in num:
        if num2 == int(i): chk=1
    if chk == 1return 1
    elsereturn 0
= [False,False] + [True] * 4000001
ans=0
for i in range(2,4000001):
    if a[i] == True:
        for j in range(i+i,4000001,i):
            a[j] = False
for i in range(A,B,1):
    if a[i] == True: ans = ans + f(i,D)
print(ans)
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

Refernce

https://leedakyeong.tistory.com/entry/Python-2-dimension-list