1. remove()
주의하자.
for i in range(0, N):
...
now_list.remove(dish[i])
2. in, not in은 매우 비효율적이다.
- 그냥 순차 탐색이라 O(N) 이다.
3. for -> list comprehension
list의 일부 element 더하고 저장
list
의 element에 접근해 값을 수정하는데, 당연히 for
이 많이 사용되지만..
- slicing을 사용하는 연습을 하자!!!!!!!
똑같은 동작이지만 시간이 아래 list comprehension 을 사용한 것이 빠르다.
truck[s:e]=[ x+move_box for x in truck[s:e] ]
2차원 list
1. '111011' 처럼 붙어서 한줄 씩 들어오는 경우
import sys
readl=sys.stdin.readline
row, col=map(int,readl().split())
maps=[[0]+list(map(int, readl().strip()))+[0] if 1<=r=R else [0]*(C+2) for r in range(R+2)]
for i in range(0,row):
print(maps[i])
7 8
0010000
0011000
0001100
1011111
1111011
0011100
0011100
0001000
3 5
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 1, 0, 0, 0, 0]
[0, 0, 0, 0, 1, 1, 0, 0, 0]
[0, 1, 0, 1, 1, 1, 1, 1, 0]
[0, 1, 1, 1, 1, 0, 1, 1, 0]
[0, 0, 0, 1, 1, 1, 0, 0, 0]
[0, 0, 0, 1, 1, 1, 0, 0, 0]
2. 'WLLWL' 처럼 붙어서 한줄 씩 들어오는 경우
import sys
readl=sys.stdin.readline
R,C = map(int,readl().strip().split())
maps[ list(readl().strip() for _ in range(R) ]
for i in range(R):
print(maps[i])
5 7
WLLWWWL
LLLWLLL
LWLWLWW
LWLWLLL
WLLWLWW
['W', 'L', 'L', 'W', 'W', 'W', 'L']
['L', 'L', 'L', 'W', 'L', 'L', 'L']
['L', 'W', 'L', 'W', 'L', 'W', 'W']
['L', 'W', 'L', 'W', 'L', 'L', 'L']
['W', 'L', 'L', 'W', 'L', 'W', 'W']
3. 2차원 list '0'으로 초기화하여 만들기
visited=[ [0 for _ in range(col+2)] for _ in range(row+2) ]
4. 2차원 list, comprehension
- maps(2차원 list)에서
element가 -1
인 것은 0
으로, 아니면 element 그대로
maps=[[0 if x==-1 else x for x in row] for row in maps]
maps[2:4]
에서 element
가 -1
인 경우 0
으로, 아닌 경우 x
값 그대로
- 2차원 리스트의 각
row
의 합이 10 이상일 때, 그 row의 합이 3으로 나누어 떨어지는 것'만' element로 담음
maps = [[1,2,3], [4,5,6], [7,8,9]]
maps = [ [ x for x in row if x % 3 == 0] for row in maps if sum(row) >=10]
dict
'x y' 형태로 들어오는 입력을 각각 dict의 key, value
- 알고리즘 문제를 풀다보면 아래와 같이
N
번의 입력을 예고하고 X Y
형태로 값을 줄때가 있는데
- 즉각
dict()
에 X: key
, Y: value
로 넣을 수 있다.
readl=sys.stdin.readline
vil=dict( map(int,readl().strip().split() for_ in range(N) )
print(vil)
3
1 0
2 21
4 0
{1: 0, 2: 21, 4: 0}
조건문 단줄화
for i in range(0,4):
nx=now_x+dx[i]
ny=now_y+dy[i]
if (nx < 0 or nx >=row) or (ny < 0 or ny >= col) or (maps[nx][ny] != 1):
continue