티스토리 뷰

주피터 노트북 셀에 설명을 다 적었습니다.

 

210713 완주하지못한선수

완주하지 못한 선수

문제 설명

  • 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

  • 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.

입출력 예

participant completion return
["leo", "kiki", "eden"] ["eden", "kiki"] "leo"
["marina", "josipa", "nikola", "vinko", "filipa"] ["josipa", "filipa", "marina", "nikola"] "vinko"
["mislav", "stanko", "mislav", "ana"] ["stanko", "ana", "mislav"] "mislav"
  • 입출력 예 설명

    • 예제 #1

      • "leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
    • 예제 #2

      • "vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
    • 예제 #3

      • "mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
In [ ]:
 

알고리즘

  • participant completion
  • participant와 completion을 집합형으로 바꿔 set(participant)-set(completion)을 하면 완주하지 못한 사람을 구할 수 있습니다.
    • 완주하지 못한 사람 중에 이름이 같은 사람이 있는 경우
      • participant와 completion을 모두 비교해야 합니다.
      • 다른 방법 생각해보기
  • 두 리스트를 비교하는 방법
    • 리스트 a, b 비교
      • c = np.array(a) == np.array(b)
      • 각 요소(성분)별 비교
      • a, b가 같은 형태일 때
  • 절차
    • 리스트 participant, completion를 정렬
    • completion의 마지막에 성분 하나를 추가
    • 요소(성분)별로 같으면 True, 다르면 False로 저장되는 리스트 : compare_list
    • 첫 번째 False가 나타나는 리스트 participant의 성분이 결과 : return
In [1]:
import numpy as np

a = ['a', 'b', 'c', 'c', 'd', 'e']
b = ['a', 'b', 'c', 'd', 'e', '']

print(np.array(a)==np.array(b))

c = np.array(a)==np.array(b)
print(c)
print(c[3])

for i in range(len(c)):
    if c[i] == False:
        print(a[i])
        break
[ True  True  True False False False]
[ True  True  True False False False]
False
c
In [ ]:
 
In [10]:
def solution(participant, completion):
    import numpy as np
    
    participant.sort()
    completion.sort()
    
    completion.append(' ')
    
    compare_list = np.array(participant) == np.array(completion)
    
    for i in range(len(compare_list)):
        if compare_list[i] == False:
            return (str(participant[i]))
In [11]:
test_lists = [
    [["leo", "kiki", "eden"], ["eden", "kiki"]],
    [["marina", "josipa", "nikola", "vinko", "filipa"], ["josipa", "filipa", "marina", "nikola"]],
    [["mislav", "stanko", "mislav", "ana"], ["stanko", "ana", "mislav"]]
]

for participant, completion in test_lists:
    print(participant, completion, solution(participant, completion))
['eden', 'kiki', 'leo'] ['eden', 'kiki', ' '] leo
['filipa', 'josipa', 'marina', 'nikola', 'vinko'] ['filipa', 'josipa', 'marina', 'nikola', ' '] vinko
['ana', 'mislav', 'mislav', 'stanko'] ['ana', 'mislav', 'stanko', ' '] mislav
  • 채점을 시작합니다.
  • 정확성 테스트
    • 테스트 1 〉 통과 (1938.10ms, 27.7MB)
    • 테스트 2 〉 통과 (2078.68ms, 27.4MB)
    • 테스트 3 〉 통과 (1974.87ms, 27.8MB)
    • 테스트 4 〉 통과 (2243.69ms, 27.9MB)
    • 테스트 5 〉 통과 (1588.68ms, 27.9MB)
  • 효율성 테스트
    • 테스트 1 〉 통과 (157.90ms, 42.3MB)
    • 테스트 2 〉 실패 (시간 초과)
    • 테스트 3 〉 통과 (251.16ms, 54.6MB)
    • 테스트 4 〉 실패 (시간 초과)
    • 테스트 5 〉 실패 (시간 초과)
  • 채점 결과
    • 정확성: 50.0
    • 효율성: 20.0
    • 합계: 70.0 / 100.0
In [ ]:
 

단순 비교하는 형태로 코딩함

제출한 코드입니다

In [20]:
def solution1(participant, completion):
    participant.sort()
    completion.sort()
    
    completion.append(' ')
    
    for i in range(len(completion)):
        if participant[i] != completion[i]:
            return (str(participant[i]))
In [21]:
test_lists = [
    [["leo", "kiki", "eden"], ["eden", "kiki"]],
    [["marina", "josipa", "nikola", "vinko", "filipa"], ["josipa", "filipa", "marina", "nikola"]],
    [["mislav", "stanko", "mislav", "ana"], ["stanko", "ana", "mislav"]]
]

for participant, completion in test_lists:
    print(participant, completion, solution1(participant, completion))
['eden', 'kiki', 'leo'] ['eden', 'kiki', ' '] leo
['filipa', 'josipa', 'marina', 'nikola', 'vinko'] ['filipa', 'josipa', 'marina', 'nikola', ' '] vinko
['ana', 'mislav', 'mislav', 'stanko'] ['ana', 'mislav', 'stanko', ' '] mislav
  • 채점 결과
    • 정확성: 50.0
    • 효율성: 50.0
    • 합계: 100.0 / 100.0
In [ ]:
 
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함