본문 바로가기
코딩 공부/프로그래머스

코딩연습 프로그래머스_완주하지 못한 선수

by 밍망몽멍뭉 2021. 1. 14.

오늘 풀 문제는 프로그래머스 완주하지 못한 선수 이다.

 

프로그래머스 완주하지 못한 선수

 

제한사항과 예시는 다음과 같다. 

 

 

내가 처음에 생각해낸 코드는

 

def solution(participant, completion):
    for i in participant:
        for j in completion:
            if i ==j : continue;
            else: return i
            

 

이것이다.

 

참가자(participant)들에 대한 완주자(completion)에 대하여 참가자와 완주자가 같다면 넘기고 다르다면 참가자가 완주자에 포함되어있는게 아니라고 생각했다..

 

결과는..

 

무엇이 문젤까낭...

 

## 그래서 겹치는게 2개 이상이면 중복이라 생각하구.. 리스트에 붙이는걸 생각함 

def solution(participant, completion):
    no_complete = []
    for i in participant:
        for j in completion:
            if count(i == j) >= 2:
                no_complete.append(i)
            elif count(i==j) = 1 :
                continue:
            elif count(i==j) = 0:
                no_complete.append(i)
                
    return no_complete

근데 말도 안된다.. 코드가..ㅋㅋㅋㅋ list에서만 count라는 함수를 사용할 수 있음

 

다시 구글링해서 찾아봄

 

그랬더니 !! sort 함수로 정렬 후에 각각 위치를 대비해서 리턴해주는 방법이 가장 이해가 잘 되었다. 

 

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

 

맨마지막 return에 [+1]을 왜해주는지 이해가 안됐는데

그럴땐 노가다로 해봐야한다.

 

 

participant                                                                  completion

[mislav, stanko, mislav, ana] [stanko, ana, mislav]

이렇게 명단이 있을때 sort를 하면 

 

[ana, mislav, mislav, stanko] [ana, mislav, stanko]

 

코드대로 하면 range(len(completion)) 은 range(3)

len(participant) >= len(completion) 이므로 

len(completion)만큼 돌아야한다

그래서 participant[0] :ana = completion[0] : ana :return 값이 없음

participant[1] :mislav = completion[1] :mislav 이므로 return 값이 없음

participant[2] : mislav != compltetion[2] :stanko이므로 return 값 mislav임 

 

return값 나왔으므로 밑에 return participant[3] 은 무시

 

 

 

 

 

# 다시 다른것으로 

 

participant                                                                  completion

[leo, kiki, eden] [eden, kiki]

 

일때 sort 하면

 

[eden, kiki, leo] [eden, kiki]

 

코드대로 하면 range(len(completion)) 은 range(2)

len(participant) >= len(completion) 이므로 

len(completion)만큼 돌아야한다

그래서 participant[0] :eden = completion[0] : eden 이므로return 값이 없음

participant[1] :kiki = completion[1] :kiki 이므로 return 값이 없음

 

 

return값이 안나왔으므로 밑에 return participant[2]을 무시하지 않고 

participant[2] : leo 을 return

 

 

 

 

 

#### 또또 다른걸로

participant                                                                  completion

[marina, josipa, nikola, vinko, filipa] [josipa, filipa, marina, nikola]

일떄 sort 하면 

['filipa', 'josipa', 'marina', 'nikola', 'vinko'] ['filipa', 'josipa', 'marina', 'nikola']

코드대로 하면 range(len(completion)) 은 range(4)

len(participant) >= len(completion) 이므로 

len(completion)만큼 돌아야한다

그래서 participant[0] :filipa= completion[0] : filipa이므로return 값이 없음

participant[1] :josipa= completion[1] :josipa이므로 return 값이 없음

participant[2] : marina= compltetion[2] :marina이므로 return 값 없음

participant[3] : nikola = compltetion[3]:nikola 이므로 return 값 없음

 

return값이 안나왔으므로 밑에 return participant[4]을 무시하지 않고

participant[4] : vinko을 return

 

 

내생각은.. 이 문제가 한명의 낙오자여서 이 코드가 먹힌것 같다.. 여러명이면 안먹힐듯.. 그래서 더 생각하는데 애를 먹었다.