기타/엘카데미

[엘카데미 챌린지] 15일차 파이썬 알고리즘 (2)

actt 2023. 7. 31. 23:40

1. 서론

파이썬 알고리즘 풀이 2일차.

강의는 '모두의 알고리즘 with 파이썬'이다.

챌린지를 진행한지도 2주가 지났다. 오늘도 분발.


2. 문제

동명이인을 찾는 알고리즘

동명이인을 찾는 알고리즘을 만들어 봅시다.

  1. 첫 번째 Tom을 뒤에 있는 Jerry, Mike, Tom과 차례로 비교합니다.
  2. 첫 번째 Tom과 마지막 Tom이 같으므로 동명이인입니다(동명이인: Tom).
  3. 두 번째 Jerry를 뒤에 있는 Mike, Tom과 비교합니다(앞에 있는 Tom과는 이미 비교했음).
  4. 세 번째 Mike를 뒤에 있는 Tom과 비교합니다.
  5. 마지막 Tom은 비교하지 않아도 됩니다(이미 앞에서 비교했음).
  6. 같은 이름은 Tom 하나뿐입니다.

이 알고리즘에서 주의할 점은 다음과 같습니다.

  1. 이번에 비교할 이름을 뽑은 다음에는 뽑은 이름보다 순서상 뒤에 있는 이름하고만 비교하면 됩니다.
    자기 자신과 비교하는 것은 무의미하고 앞에 있는 이름과는 이미 비교가 끝났기 때문입니다.
  2. 리스트의 마지막 이름을 기준으로는 비교하지 않아도 됩니다.
    자신의 뒤에는 비교할 이름이 없고, 앞과는 이미 비교가 끝났기 때문입니다.
  3. 같은 이름을 찾으면 결과 집합에 그 이름을 추가합니다.
1. 리스트 변수 a을 입력받아 집합을 비교하여 이름이 같을 경우 변수 result에 저장하여 반환하는 함수 find_same_name을 작성하세요. set()를 사용하여 빈 집합을 생성해 변수 result에 먼저 저장해주어야 합니다.
2. 함수 find_same_name에 리스트 name을 넣어 출력하세요.
3. 함수 find_same_name에 리스트 name2를 넣어 출력하세요.

풀이

def find_same_name(a):
    result = set()
    n = len(a)
    for i in range(n - 1):
        for j in range(i + 1, n):
            if a[i] == a[j]:
                result.add(a[i])
    return result

name = ["Tom", "Jerry", "Mike", "Tom"]
name2 = ["Tom", "Jerry", "Mike", "Tom", "Mike"]

print(find_same_name(name))
print(find_same_name(name2))