Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 28 | 29 | 30 |
| 31 |
Tags
- 데이터베이스
- 코테
- Database
- 대학생
- GNN
- sort
- mysql
- SQL
- CNN
- 데베
- Data_Structure
- 개발자
- Mesh
- 코딩테스트
- 컴퓨터사이언스
- DS
- CS
- 자료구조
- LeetCode
- coding
- 티스토리챌린지
- db
- Leet Code
- Python
- 데이터
- adaptive remeshing
- meshgraphnet
- code
- 컴퓨터공학
- 오블완
Archives
- Today
- Total
sy1214ei 님의 블로그
by 백준 1158 요세푸스 본문
1. 입출력 (Input/Output)
- 실수 포인트: 데이터 양이 많은 문제에서 input()을 사용해 '시간 초과(TLE)' 발생.
- 해결책: sys.stdin.readline을 사용하여 입력 속도를 최적화한다.
import sys
input = sys.stdin.readline # 습관적으로 맨 위에 선언
# 숫자 하나 읽기
n = int(input())
# 공백으로 구분된 여러 숫자 리스트로 읽기
nums = list(map(int, input().split()))
# 여러 줄에 걸쳐 들어오는 숫자들을 한꺼번에 읽기
data = list(map(int, sys.stdin.read().split()))
2. 인덱스 순환 구조 (Circular Index)
- 실수 포인트: 리스트 끝에서 다시 앞으로 돌아갈 때 while이나 if로 인덱스를 직접 빼다가 실수함.
- 해결책: 나머지 연산자(%)를 활용하여 인덱스 범위를 항상 유지한다.
# 현재 인덱스에서 K번째 요소를 찾을 때 (0번 인덱스 기준)
# 현재 리스트의 길이를 n이라고 하면
index = (index + (K - 1)) % n
3. 리스트 연산의 시간 복잡도 (O(n^2) 주의)
- 실수 포인트: 반복문 안에서 list.pop(i)나 list.remove()를 사용하여 전체 복잡도가 O(n^2)이 됨. (데이터가 10,000개만 넘어도 위험)
- 해결책:
- 1. 데이터 삭제가 빈번하다면 collections.deque의 popleft()를 사용하여 O(1)로 처리.
- 2. 삭제 대신 값을 변경(예: 0으로 바꿈)하고 나중에 한꺼번에 처리.
- 주의: pop()은 맨 뒤 요소를 뺄 때만 O(1)이고, 중간이나 맨 앞을 뺄 때는 O(n)이다.
4. 출력 형식 (Formatted Output)
- 실수 포인트: <3, 6, 2>와 같이 특수 문자나 공백이 포함된 형식을 맞추지 못해 '출력 형식이 잘못되었습니다' 발생.
- 해결책: f-string과 join()을 조합하여 문자열을 만든다.
visit = [3, 6, 2, 7, 5, 1, 4]
# 1. 숫자 리스트를 문자열로 변환 후 ", "로 연결
res = ", ".join(map(str, visit))
# 2. 양 끝에 괄호 붙여서 출력
print(f"<{res}>")
- 리스트가 비어있는지 확인할 때는 if not num:을 사용하자. (if num is None:은 금지!)