정글에서 온 개발자
정글 5일차 TIL 본문
알고리즘을 풀기보다는 백준 문서를 읽고 궁금한 걸 찾는데 시간을 더 보냈다.
- https://www.acmicpc.net/blog/view/55
- https://www.acmicpc.net/blog/view/70
- https://dailyheumsi.tistory.com/32
작동 원리
- 줄바꿈 데이터
- 데이터의 끝에 ‘/n’ 이 들어오는 것이 원칙, 꼭 지켜지지는 않음
- ‘/n’으로 입력의 끝을 검사하면 문제 생길 수 있음
- 널 문자는 하나의 문자로 취급. 널 문자는 공백과 다름.
- 데이터의 끝에 ‘/n’ 이 들어오는 것이 원칙, 꼭 지켜지지는 않음
언어별 조심해야 할 것들
C
- 오버플로우 조심
- cio, cout 는 iostream
- float는 너무 부정확함 → double 쓰자
- fflush 는 출력 스트림만 비울 수 있다. fflush(stdin)은 표준이 아님. rewind(stdin)도 마찬가지
Python
- 시간제한 : *3 +2초
- 메모리제한: * 2 + 32MB
- input 대신 sys.stdin.readline.rstrip() 을 사용하자.
- 문자열 자체를 변수에 저장하는 게 문제.
- 개행문자가 끝에 와도 int() , split() 에는 지장 없다.
- input = sys.stdin.realine 으로 먼저 정의해놓고 쓰는 것도 방법
- 파이썬에서 큐나 덱이 필요하면 반드시 collection.deque를 쓰자.
- 재귀 깊이는 최대 1000. 재설정할 수 있다.
- 두개의 int를 나누면 float이 됨
Pypy
- s+c 의 시간복잡도가 CPython에서 O(1), Pypy에서 O(len(s))
- 재귀에 약하다. (재귀 깊이 설정이 안된다.)
파이썬 문법
메서드 체이닝 비교
- 내부적으로 두 개의 비교 연산자를 and 로 연결하여 처리한다.
- 더 긴 체인으로도 확장 가능하다.
- 1<a<2<b<3
- 따라서 or 연산자가 필요한 연산은 체이닝 비교를 쓸 수 없다.
- ex) a<1 or a>2
파이썬 여러줄로 나뉜 자료를 배열로 담을 때
a = [sys.stdin.readline() for _ in range(n)]
재귀가 깊을 때, 재귀 깊이 미리 설정
import sys
sys.setrecusionlimit(10**8)
sys.stdin.readline() 이 input()보다 더 빠른 이유
- input() 이 sys.stdin.readline()을 기반으로 만들어진 함수인데, 사용자가 읽을 수 있도록 추가 작업을 더한다.
- input = sys.stdin.readline 을 해두면 input이 뒤의 함수로 작동해 편하다.
ord() 함수 (출처 GPT)
- ord()는 "ordinal"의 약어로, 주어진 문자의 순서나 위치를 나타내는 수를 반환한다는 의미에서 이 이름이 사용되었다.
모듈러 연산
2023.10.15 - [정리] - 음수에서의 모듈러 연산
더 공부하고 싶은 것들
- 정수에 매우 가까운 수를 int로 바꾸는 것은 왜 위험한가?
- Pypy는 Python으로 짠 python이다. 어떻게 가능한 것인가.
- 부트스트래핑의 개념
- JIT의 개념
- 툴체인
'TIL' 카테고리의 다른 글
pintOS - Alarm Clock. Explicit Global Tick 고찰 (0) | 2023.12.04 |
---|---|
백준 1074 : Z (2) | 2023.11.18 |
정글 7일차 TIL (0) | 2023.10.18 |
알고리즘의 설계 (0) | 2023.10.17 |
정글 6일차 TIL(소수 구하기, 파이썬 할당문) (0) | 2023.10.16 |