IT_developers

Python algorithm 개념 및 실습 - 동명이인 찾기 본문

Python

Python algorithm 개념 및 실습 - 동명이인 찾기

developers developing 2022. 9. 16. 09:00

알고리즘이란 ?

  • 어떤 일을 하기 위한 명령의 집합
  • 문제 해결 방법을 추상화하여 각 절차를 논리적으로 기술해 놓은 것
  • 어떤 문제를 해결하기 위한 절차나 방법

 

알고리즘 복잡도

  • Complexity
    • 어떤 알고리즘이 문제를 풀기 위해 해야하는 계산이 얼마나 복잡한가?
  • 알고리즘의 성능을 객관적으로 평가하는 기준
    • 시간복잡도(time complexity) : 실행 횟수로 판단
    • 공간복잡도(space complexity) : 기억공간과 파일 공간의 사용량
  • 빅오 표기법 ( Big O Notation)
    • 알고리즘이 얼마나 빠른지 표시하는 방법
    • 입력 데이터 크기 증가할 때 알고리즘 연산 시간(횟수)의 증가 방식
    • 연산의 횟수를 비교함
    • O(n) : 계산 복잡도 
      • O : 빅 O
      • n : 연산 횟수
      • O(1) : 입력 크기 n과 계산 복잡도가 무관 할때 ex) n(n+1)/2
      • O(logn) : 입력 크기 n의 로그 값에 비례하여 증가 ex) 이분탐색
      • O(n) : 입력 크기 n에 비례하여 복잡도 증가 ex) 최댓값, 순차탐색
      • O(nlogn) : 입력 크기 n과 로그 n 값의 곱에 비례하여 복잡도 증가 ex) 병합정렬, 퀵정렬
      • O(n²) : 입력 크기 n의 제곱에 비례하여 복잡도 증가 ex) 선택정렬, 삽입정렬
      • O(n₂) : 입력 크기가 n 일 때, 2의 n 제곱 값에 비례하여 복잡도 증가 ex)하노이의 탑

 

동명이인 찾기

 ["Tom","Jerry","Mike","Tom"]


# Tom 입장 : 3번 비교 == (n-1)
# Jerry 입장 : 2번 비교 == (n-2)
# Mike 입장 : 1번 비교 == (n-3)
# Tom 입장 : 0번 비교

# 계산 복잡도 O(n제곱)

# 중복된 이름을 set() 에 추가한 후 리턴
def dup_name(list1):
    result = set()
    size = len(list1)

    for i in range(0, size - 1):
        for j in range(i + 1, size):
            if list1[i] == list1[j]:
                result.add(list1[i])
    return result


if __name__ == "__main__":
    list1 = ["Tom", "Jerry", "Mike", "Tom"]
    print(dup_name(list1))

 

 

 

 딕셔너리 - key:value 구조

# {"Tom" : 1, "Jerry":2} ==> Tom은 한번이 나왔고, Jerry는 두번이 나옴,


# 중복된 이름을 set() 에 추가한 후 리턴
def dup_name(list1):

    name_dict = {}

    # 반복문 - 이름이 등장한 횟수를 딕셔너리로 만듦
    for name in list1:
        if name in name_dict:
            name_dict[name] += 1
        else:
            name_dict[name] = 1
 
    # 중간 확인.  {'Tom': 2, 'Jerry': 1, 'Mike': 1}
    print(name_dict)

 
result = set()
    for name in name_dict:
        if name_dict[name] >= 2:
            result.add(name)
    return result


if __name__ == "__main__":
    list1 = ["Tom", "Jerry", "Mike", "Tom"]
    print(dup_name(list1))

Comments