본문 바로가기
CS, 알고리즘/알고리즘 및 코테

백준 10815번 회고(파이썬)

by 최지철 2023. 6. 30.
728x90
반응형

회고

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import sys
 
= int(sys.stdin.readline())
Nlist = [] * N
 
Nlist = list(map(int, sys.stdin.readline().split()))
= int(sys.stdin.readline())
Mlist = [] * M
 
Mlist = list(map(int, sys.stdin.readline().split()))
 
find = []
find = list(set(Mlist) & set(Nlist))
 
result = [] 
for i in range(M):
   for j in range(len(find)):
      if Mlist[i] == find[j]:
         result.append(1)
         break
      else:
         if j == len(find) - 1:
            result.append(0)
            break
for i in result:
   print(i,end=" ")
print("")
cs

처음 풀이 이다. 시간초과가 떠서 문제점을 파악한다.

 

1. 입력 부분에서는 input()대신 sys를 써서 별 탈 없어 보인다.

2. list(set()) 부분 또 한 O(n)

3.append 또한 O(1)

4. 이중for문이 범인이 유력한 상황이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys
 
= int(sys.stdin.readline())
Nlist = [] * N
 
Nlist = list(map(int, sys.stdin.readline().split()))
= int(sys.stdin.readline())
Mlist = [] * M
 
Mlist = list(map(int, sys.stdin.readline().split()))
 
find = []
find = list(set(Mlist) & set(Nlist))
 
result = [1 if num in find else 0 for num in Mlist]
 
print(*result)
cs

해당코드로 2중 for문을 없앳지만 또 시간 초과 발생..

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
 
= int(sys.stdin.readline())
Nlist = list(map(int, sys.stdin.readline().split()))
= int(sys.stdin.readline())
Mlist = list(map(int, sys.stdin.readline().split()))
 
find = set(Nlist)
result = []
 
for num in Mlist:
    if num in find:
        result.append(1)
    else:
        result.append(0)
 
print(*result)
 
cs

휴우... 이유는 먼저 리스트에 할당을 해서이다... 참... 입력처리에서 문제가 생겼었다니..

그리고 if - in을 통해 존재 확인을 하는방법을 알게 되엇따!

c++에 비해 파이썬은 함수가 많고 매력적이나, 이런 시간을 늘 생각해야한다는게 참 흠이다. ㅠㅠ

5번째만에 성공ㅎㅎ

 

728x90
반응형