전체 글 21

백준 11718번: 입력이 없는데 EOFError가 발생하지 않는다고?

sys.stdin.readline()은 빈 문자열을 반환한다!import syswhile True: try: userInput = sys.stdin.readline().strip() print(userInput) except: break EOFError(End of File)는 파일의 끝, 즉 입력의 끝을 의미한다. input()은 파일의 끝에서 EOFError를 발생시키지만, sys.stdin.readline()은 빈 문자열을 반환하므로 EOFError를 발생시키지 않는다. 따라서 출력 초과로 인한 오답 처리가 되는 것이다.while True: try: print(input()) except: break 물론 이렇게 간..

Insights/For KR 2024.11.23

시간복잡도 실전 이해: 문자열 결합 연산 쓰지 마!

시간복잡도 프로그래밍 언어에서 시간복잡도란 입력의 크기(N)에 따라 알고리즘이 얼마나 많은 "시간"을 소모하는지를 나타내는 척도이다. 표기법은 다양하나, 일반적으로는 O(1), O(n), O(log n), O(n^2) 등의 표기법을 사용한다. 실제 코드 시간복잡도 분석import sysN = int(sys.stdin.readline())result = ""for i in range(N // 4): result += "long "result += "int"print(result) 백준 25314번 문항을 풀며 실제 내가 제출한 코드로, 입력값 N에 따라 "long "을 N // 4번 반복해서 결과 문자열에 추가한 후, 마지막에 "int"를 붙여서 출력하는 프로그램이다. 다음은 코드를 쪼개어 각 코드의..

Basics/For KR 2024.11.19

백준 2675번: 디버거로 분석하는 이스케이프 문자 처리

이스케이프 문자 이스케이프 문자는 문자열 내에서 특별한 역할을 한다. 그리고 일반적으로 백슬래시(\)가 이스케이프 문자로 쓰인다. 이스케이프 문자는 바로 뒤에 오는 문자와 조합하여 다양한 특수 기능을 하기 때문에 취급에 주의해야 한다. 이스케이프 시퀀스\n줄 바꿈\t탭\\백슬래시\'작은따옴표\"큰따옴표 디버깅을 통해 이스케이프 문자 처리 확인하기 \uXXXX는 유니코드 이스케이프 시퀀스다. 따라서 \u03B1은 그리스 문자 α를 나타낸다. 문자열로 변수 test1에 할당한 경우 'α'가 할당되었으며, 원시 문자열로 변수 test2에 할당한 경우 '\\u03B1'가 할당된 것을 확인해 볼 수 있다. 참고로 원시 문자열이라고 함은 문자열 앞에 r을 붙여 표시한 것을 말한다.  디버깅을 해보며 알게 된 사실은..

Insights/For KR 2024.11.16

파이썬의 연결리스트: 노드가 주소를 가리킨다고요?

노드 연결리스트에서 노드는 데이터의 한 단위를 의미한다. 각 노드는 메모리에서 별도의 위치를 차지하기 때문에 노드마다 고유한 메모리 주소가 할당되어 있다. 노드의 구조를 살펴보면 해당 노드가 저장한 데이터와 다음 노드를 가리키는 포인터(next) 요소를 찾아볼 수 있다.class Node: def __init__(self, data): self.data = data self.next = None 노드 생성 왼쪽 노드의 메모리 주소가 "1202243114115"이고 오른쪽 노드의 메모리 주소가 "1202243112121"이라고 가정하자. "zun"이라는 데이터를 지닌 왼쪽 노드의 포인터가 오른쪽 노드의 메모리 주소인 "1202243112121"를 저장한다면 어떨까? 두 노드가..

Basics/For KR 2024.11.12