파이썬 알고리즘-11~21(탐색) 배운 것 정리
11. 회문 문자열 검사
- 회문 판별에서는 글자의 길이와 상관 없이 길이//2만큼 반복문을 실행하여 처음+i 끝-i 을 반복해서 비교해주면 된다.
12. 숫자만 추출
- isdecimal()함수를 사용해 0~9까지의 숫자인지 확인한다.
- 숫자의 자리수를 늘려갈 때는 res=res*10 + 숫자 를 사용한다.
13. 카드 역배치
- 스왑(a,b=b,a)를 이용해 양 끝의 숫자끼리 차례로 바꿔준다.
14. 두 리스트 합치기
- 각 리스트의 인덱스를 포인터로 가정하여 차례로 크기를 비교해간다.
- 크기를 비교한 후 나머지는 슬라이싱으로 끝까지 append한다.
15. 수들의 합
- 0번째에 lt 1번째에 rt를 놓고 합을 0번째 값으로 초기화한다.
- 합이 목표값보다 작으면 rt번째 값을 더해주고 한칸 오른쪽으로, 반대의 경우에는 lt번째 값을 빼주고 왼쪽으로, 같으면 cnt+1 후 lt번째 값을 빼고 왼쪽으로 이동한다.
16. 격자판 최대합
- 행-열의 관계는 a[i][j] - a[j][i]이므로 같은 반복문으로 행의 합 열의 합을 구할 수 있다.
- 대각선은 a[i][i] 또는 a[i][n-1-i]이다.
17. 사과나무
- 처음과 끝의 인덱스를 중간부터 시작해서 반복문이 돌 때마다 start를 왼쪽으로 1칸 end를 오른쪽으로 1칸 움직이는데, 중간의 행이 되면 반대로 start를 오른쪽으로 1칸 end를 왼쪽으로 1칸 움직인다.
18. 곶감
- 리스트 회전(처음/끝 원소를 끝/처음으로 이동)은 pop/insert를 사용해 pop한 것을 insert해준다.
- 모래시계 모양으로 더해나가는 것은 다이아몬드와는 반대로 양 끝에서 시작한다.
19. 봉우리
- 행렬의 주변을 0으로 둘러싸는 방법은 [0]을 insert, append로 앞뒤에 붙여주고 반복문을 통해 각 행의 양 끝에 0을 붙여준다.
- 원소의 상하좌우를 비교하는 방법은 dx=[-1, 0, 1, 0] dy=[0, 1, 0, -1]를 만들고, lst[i+dx][j+dy]를 사용해 비교한다.
- 모든 조건이 참일 때: all()을 쓰면 인자가 모두 참일 때만 True가 된다.
20. 스도쿠
- 체크리스트와 그 인덱스를 사용, 인덱스 번호에 해당하는 숫자가 하나씩 있을 때 1로 만들어 줌으로써 합이 9가 되면 1~9가 모두 존재하는 것이 된다.
21. 격자판 회문수