inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

38군데 합격 비법, 2026 코딩테스트 필수 알고리즘

1-7. 공간 복잡도 판단하기

시간복잡도 설명부분에서 질문이 있습니다

해결된 질문

134

깡패 햄스터

작성한 질문수 7

0

1. 현재 학습 진도

 

2. 어려움을 겪는 부분

1-7 강에서 시간 복잡도 설명을 해주시면서
아래 코드들을 직접 array 길이의 값인 26을 대입하여 비교해주셨는데요,

사실상 첫 번째 코드는 이중 for문이므로 O(N^2)이고, 두 번째 코드는 for문을 각각 1개씩 썼기때문에 O(N)라 시간복잡도면에서 큰 차이가 나지않나해서요

강의에서는 직접 숫자를 대입한 후에 첫 번째 코드와 두 번째코드는 N^2에 비해 효율에 있어 차이가 없다고 말씀하셔서 어디 부분에 제가 혼동이 오는지 궁금하여 질문드립니다!

 

 for alphabet in alphabet_array:    # alphabet_array 의 길이(26)만큼 아래 연산이 실행
        occurrence = 0                  # 대입 연산 1번 실행
        for char in string:             # string 의 길이만큼 아래 연산이 실행
            if char == alphabet:        # 비교 연산 1번 실행
                occurrence += 1         # 대입 연산 1번 실행 

        if occurrence > max_occurrence: # 비교 연산 1번 실행
            max_alphabet = alphabet     # 대입 연산 1번 실행
            max_occurrence = number     # 대입 연산 1번 실행

    for char in string:        # string 의 길이만큼 아래 연산이 실행
        if not char.isalpha(): # 비교 연산 1번 실행
            continue
        arr_index = ord(char) - ord('a')         # 대입 연산 1번 실행 
        alphabet_occurrence_list[arr_index] += 1 # 대입 연산 1번 실행 

    max_occurrence = 0        # 대입 연산 1번 실행 
    max_alphabet_index = 0    # 대입 연산 1번 실행 
    for index in range(len(alphabet_occurrence_list)):    # alphabet_array 의 길이(26)만큼 아래 연산이 실행
        alphabet_occurrence = alphabet_occurrence_list[index] # 대입 연산 1번 실행 
        if alphabet_occurrence > max_occurrence: # 비교 연산 1번 실행 
            max_occurrence = alphabet_occurrence # 대입 연산 1번 실행 
            max_alphabet_index = index           # 대입 연산 1번 실행 

python 코딩-테스트 알고리즘 data-structure

답변 1

0

딩코딩코

안녕하세요 햄스터님! 좋은 질문 감사합니다

프사와 닉네임이 너무 귀엽네요

 

사실상 첫 번째 코드는 이중 for문이므로 O(N^2)이고, 두 번째 코드는 for문을 각각 1개씩 썼기때문에 O(N)라 시간복잡도면에서 큰 차이가 나지않나해서요

요 내용에 대해서 답변을 드려보겠습니다!

먼저, 이중 for문이 반드시 O(N^2)을 의미하는 것은 아닙니다. 시간 복잡도를 판단할 때는 루프의 실제 반복 횟수와 입력 크기를 고려해야 합니다.

첫 번째 코드를 자세히 살펴보면:

for alphabet in alphabet_array:    # alphabet_array의 길이는 26 (상수)
    for char in string:             # string의 길이는 N (변수)
        # 연산들...

여기서 중요한 점은:

  • alphabet_array 루프는 고정된 길이 26을 가집니다. 이는 상수입니다.

  • string 루프는 길이 N으로 변수입니다.

따라서 전체 시간 복잡도는 O(26 * N)이 되며, Big O 표기법에서 상수 26은 제거되므로 결국 O(N)이 됩니다.

이중 for문이라고 해서 무조건 O(N^2)이 아니라, 각 루프의 입력 크기에 따라 달라집니다. 여기서는 외부 루프가 상수이므로 O(N)으로 볼 수 있습니다

또 궁금하신 점이 생기시면 편하게 질문 부탁드립니다 __

코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요

0

55

2

3-3 정렬-2 선택정렬 로직

0

36

2

링크드 리스트 끝에서 k번째 값 출력하기

0

42

2

LinkedList 과제 Fast, slow 포인터

0

49

2

투포인터 시간복잡도

0

50

2

수강평 작성 후 자료

0

50

2

수업교재 링크 오류

2

106

2

프로그래머스에서 제출 후 채점시 틀림ㅠ

0

127

2

1-10 알고리즘 더 풀어보기(2) 질문 있습니다

0

69

2

문제 풀이 방식 관련 질문입니다!

0

81

2

1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다

0

85

2

수업자료 pdf 받고싶습니다

0

103

2

강의 자료 오류 수정

0

70

1

2-10 더하거나 빼거나 관련 질문입니다

0

61

2

3-8 해쉬 -2

0

48

2

Linked List Element Delete Explanation Problem

0

66

2

강의3-4 스택 탑 문제

0

74

2

코드스니펫 입출력 케이스에 오류가 있는것 같아요

0

98

3

링크드 리스트 원소 찾기 구현 방식 질문드립니다.

0

74

2

1874 - 스택 문항

0

80

2

DP Java 예제 자료형 오버플로우 문제

0

97

2

4-9 4주차 숙제중 농심라면 문제

0

107

2

DFS 에서 스택을 사용하는 이유

1

183

3

들여쓰기가 햇갈리네요

0

120

2