분류 전체보기
-
[Algorithm 이론#1] 시간 복잡도 계산법 (상수항, 2중, 3중 for문)Programming/Algorithm 2026. 3. 31. 19:47
알고리즘 문제 풀이에서 시간 복잡도를 계산하는 가장 기본적이고 확실한 방법은"반복문이 총 몇번 실행되는가?"를 세는 것입니다. 중첩된 for문은 깊어질수록 연산량이 기하급수적으로 폭발하므로, 정확한 계산법을 알아야 시간 초과를 피할 수 있습니다. 1. 반복문이 없거나 횟수가 고정된 경우: 상수 시간 O(1)# N이 10만이든 100억이든 무조건 10번만 실행됨for i in range(10): print(i)계산법 : 10번시간 복잡도 : O(1) (상수 시간)2. 1중 for문: 선형 시간 O(N)for i in range(N): print(i)계산법 : n번시간 복잡도 : O(N) 3. 2중 for문 : 직사각형 면적 구하기 O(N^2)2중 for문은 바깥쪽 루프가 1번 돌 때마다 안쪽..
-
[Algorithm 이론#1] 시간복잡도, 점근적 표기법Programming/Algorithm 2026. 3. 30. 21:53
1. 시간 복잡도란? 알고리즘의 성능을 평가할 때 '실행 시간'을 스톱워치로 재는 것은 무의미합니다. 컴퓨터의 하드웨어 성능, 운영체제 상태 등에 따라 매번 결과가 달라지기 때문입니다. 따라서 컴퓨터 공학에서는 입력 데이터의 크기(N)가 증가함에 따라 프로그램의 '연산 횟수'가 얼마나 가파르게 증가하는지를 수학적인 함수로 나타냅니다. 이것이 바로 시간 복잡도입니다. 시간 복잡도 = 데이터 크기에 따른 연산 횟수의 증가 비율 2. 점근적 표기법연산 횟수를 정확한 수식 (예 : 3N^2 + 5N + 2)으로 표현할 수도 있지만, N이 무한히 커질 때는 최고차항 외의값들은 영향력이 미미해집니다. 따라서 가장 지배적인 항만 남겨서 함수의 한계(Bound)를 표현하는 방식을 접근적 표기법이라고 합니다. ..
-
[Python] min()/ max() 가이드 : key, default 옵션Programming/Python 2026. 3. 23. 12:33
파이썬의 min()과 max()는 단순히 가장 크고 작은 값을 찾는 것을 넘어서데이터의 비교 기준 자체를 프로그래머가 마음대로 조작할 수 있는 아주 유연하고 강력한 함수입니다. 이 함수의 숨겨진 동작 원리와 관련 옵션을 살펴 보도록 하겠습니다. 1. 기본 동작 원리 : 숫자와 문자열의 치명적인 차이min()과 max()에 숫자를 넣으면 우리가 아는 수학적 크기대로 비교하지만, 문자열(String)을 넣으면 '아스키 코드' 값을 기준으로 한 사전순 비교를 수행합니다. 함정 : 문자열 숫자 비교# 1. 일반 숫자 비교print(max(10, 2)) # 출력 : 10 (수학적 크기)# 2. 문자열 숫자 비교(첫 글자 비교)print(max("10", "2")) # 출력 : "2"왜 "2"가 더 클까요? : 문..
-
[python] 문자열 뒤집기의 모든 것Programming/Python 2026. 3. 22. 18:57
한번 생성하면 수정할 수 없다.파이썬에서 문자열을 다룰 때 반드시 기억해야 할 대전제가 있습니다. 바로 "파이썬의 문자열은 한 번 만들어지면 수정할 수 없다(Immutable)"는 것입니다. 따라서 문자열의 일부분을 뒤집든 전체를 뒤집든, 파이썬은 기존 문자열을 조작하는 것이 아니라 "뒤집힌 새로운 문자열을 메모리에 새로 만들어내는 과정"을 거칩니다.이 원리를 이해하면 어떤 뒤집기 방식을 선택해야 할지 명확해집니다. 1. 슬라이싱 (Slicing) : 파이썬 생태계의 절대 강자전체 문자열이든 부분 문자열이든, 파이썬에서 문자열을 뒤집을 때 가장 먼저 고려해야 할 최고의 방법입니다.text = "Hello, World!"# 전체 문자열 뒤집기reversed_text = text[::-1]# 부분 문자열..
-
[Algorithm#7] 백준 5597 과제 안 내신 분..? (Python)Programming/Algorithm Pb 2026. 3. 21. 10:13
목표 X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오. 입력 입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다. 출력 출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다. 풀이1. 직관적인 완전 탐색 변수 설정 출석번호 저장을 위한 a 리스트 풀이 방법:리스트 선언 : a = []과제를 제출한 28명의 출석 번호 a 리스트에 저장 ..
-
[python] 코딩테스트 시간 초과 해결법 : input vs sys.stdin.readlineProgramming/Python 2026. 3. 19. 10:07
입력 시간 문제..파이썬으로 알고리즘 문제를 풀 때, 많은 초보자들이 습관적으로 input()함수를 사용하여 데이터를 입력받습니다.하지만 입력 데이터가 10만개, 100만 개로 늘어나면 이 작은 습관 하나 때문에 '시간 초과' 판정을 받게 됩니다. 이 글에서는 파이썬의 기본 입력 함수인 input()과 빠른 입력 함수인 sys.stdin.readline의 차이를 내부 동작 원리와 함께 상세히 파헤쳐 보겠습니다. 1. 왜 input()은 느릴까?파이썬의 내장 함수인 input()은 단순히 사용자의 입력을 받는 것 이상의 부가적인 작업들을 내부적으로 수행합니다.프롬프트 출력 대기 : input("숫자를 입력하세요: ")처럼 사용자에게 보여줄 메시지를 화면에 띄울 준비를 합니다. 코딩 테스트에서는 화면에 메시..
-
[Algorithm#6] 백준 2480 주사위 세개 (Python)Programming/Algorithm Pb 2026. 3. 19. 09:30
목표 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다...
-
[Algorithm#5] 백준 2884 알람 시계 (Python)Programming/Algorithm Pb 2026. 3. 18. 13:31
목표 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.이런 상근이를 불쌍하게 보던 창영이는 자신이 사용하는 방법을 추천해 주었다.바로 "45분 일찍 알람 설정하기"이다.이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하..