[Programmers] - 완주하지 못한 선수

오동훈·2021년 3월 18일
0

Programmers

목록 보기
18/64
post-thumbnail

1. Problem 📃

https://programmers.co.kr/learn/courses/30/lessons/42576

다음 문제는, 마라톤에 참여한 사람들의 배열 1개와 완주한 사람들의 배열 1개가 주어질 때, 그 중 완주하지 못한 선수를 찾아내는 문제입니다.

2. Logic 👨‍🏫

1. 첫번째 코드 Logic

  1. 완주한 사람들의 이름을 찾고
  2. 그 사람들의 이름을 index 함수를 가지고 참가자 목록에서 찾은 다음 지워버리기
  3. 그러고 한사람이 남게 되면 그 사람 반환

2. 두번째 코드 Logic

  1. 참가자들을 가지고 value값으로 딕셔너리 구성 (key 값은 그냥 숫자로)
  2. 1번에서 구성한 딕셔너리의 키값과 완주자의 이름이 같다면 딕셔너리 키값을 0으로 바꾸고 완주자 이름을 목록에서 제거
  3. key값과 value값을 바꿔주기
  4. del 예약어를 가지고 key값이 0인 애들 싹 지워주기 (이 과정에서 딕셔너리 내에는 1개만 존재하게 됨)
  5. 리스트로 변환해서 0번째 인덱스 값 반환

3. 세번째 코드 Logic

  1. 참가한 사람들과 완주한 사람들을 각각 정렬해준다.
  2. 두 리스트의 순서를 차례대로 비교하고, 만약 다른 값이 나온다면 그 값이 정답이다.

3. Code 💻

1. 내가 첫번째로 푼 코드 (정확성은 100%지만 timeout)

def solution(participant, completion):
    for i in range(len(completion)):
        del participant[participant.index(completion[i])]
    return participant[0]

2. 내가 두번째로 푼 코드 (정확성은 100%지만 timeout)

def solution(participant, completion):
    diction = {i+1 : key for i, key in enumerate(participant)}
    for i, key in enumerate(diction):
        if i < len(completion):
            for j in range(len(completion)):
                if diction[key] == completion[j]: # 키 값 수정
                    diction[key] = 0
                    completion[j] = 0
    diction_edit = {v:k for k,v in diction.items()}
    del diction_edit[0]
    a = list(diction_edit.keys())
    return a[0]

3. 드디어 통과한 코드

def solution(participant, completion):
    participant.sort()
    completion.sort()
    for i in range(len(completion)):
        if participant[i] != completion[i]:
            return participant[i]
    return participant[-1]

4. Feedback 📚

정렬해서 비교해 풀 생각은 전혀 하지 못했는데 승현이덕분에 아이디어를 얻었다.
요즘 문제 풀면서 정렬이 유용했던 적이 되게 많이 있었는데 흠.. 앞으로 이런 문제 나오면 틀리지 말아야징😁

profile
삽질의 기록들🐥

0개의 댓글