소스코드와 문제는 다 제공하므로, 유형별로 개념 및 팁 정리
1. 문자열 처리
회문 검사 / 문자열 파싱
- 개념
- 파이썬에서 문자열은 불변(immutable) 자료형
- 회문 검사
- 1. 문자열 뒤집기: s == s[::-1]
- 투 포인터:
left=0, right=len-1 양끝 비교
- 문자열 파싱
- 구분자 기준 나누기: split()
- 불필요 문자 제거: strip(), replace(), re.sub()
- 주의할 점
- 대소문자 통일 (lower()/upper())
- 공백/특수문자 제거 여부 문제 조건 확인
2. 배열 조작
구간 뒤집기 / 정렬된 배열 병합
- 구간 뒤집기
- 슬라이싱 활용: arr[l-1:r] = arr[l-1:r][::-1]
- deque 사용 시 O(1) pop/append 가능
- 정렬된 배열 병합
- 투 포인터 방식: 두 배열에서 작은 값을 먼저 결과에 추가
- 파이썬 내장: heapq.merge(A, B) 또는 sorted(A+B) (하지만 시간/메모리 고려 필요)
- 주의할 점
- 인덱스 시작 기준(0 vs 1) 문제 조건 확인.
3. 부분 배열/구간
구간 합 / 투 포인터
- 구간 합 (Prefix Sum)
- prefix[i] = arr[0] + ... + arr[i-1]
- 구간
[l, r] 합 = prefix[r] - prefix[l-1]
- 투 포인터
- 원리: 정렬된 배열에서 두 개의 인덱스를 이동하며 조건 만족 여부 확인
- 활용:
- 특정 합 찾기 (Two Sum)
- 부분 합 조건 만족 구간 찾기
- 주의할 점
- 음수 포함 여부: 음수가 있으면 투 포인터 방식에서 단순 증감 불가 → 슬라이딩 윈도우 대신 누적합 활용
4. 2차원 배열
격자 패턴 / 회전 연산
- 격자 탐색 => 방향 리스트
- 보통 dx, dy 방향 배열을 선언 후 반복문으로 탐색
dx = [0, 0, -1, 1] # 상하좌우
dy = [1, -1, 0, 0]
for i in range(4):
nx, ny = x+dx[i], y+dy[i]
- 회전 연산
- 90° 회전: rotated[j][N-1-i] = arr[i][j]
- 시뮬레이션 문제에서 자주 등장
- 주의할 점
- 인덱스 범위 체크 (0 <= nx < N and 0 <= ny < M)
- 깊은 복사 필요 시 copy.deepcopy()
5. 검증/유효성 검사
- 완전 탐색
- 가능한 모든 경우를 다 확인 → 브루트포스
- 시간 제한 체크: N이 크면 비효율 → 최적화 필요
- 스도쿠 검증
- 행, 열, 3x3 박스에 1~9가 모두 존재하는지 확인.
- 집합(set)으로 중복 체크: len(set(arr)) == 9
- 회문수 탐색
- 정수 ↔ 문자열 변환 후 회문 검사
- 또는 직접 나눠서 앞뒤 비교