정글에서 온 개발자

정글 5일차 TIL 본문

TIL

정글 5일차 TIL

dev-diver 2023. 10. 15. 00:06

알고리즘을 풀기보다는 백준 문서를 읽고 궁금한 걸 찾는데 시간을 더 보냈다.

작동 원리

  • 줄바꿈 데이터
    • 데이터의 끝에 ‘/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