오늘 풀 문제는 프로그래머스 완주하지 못한 선수 이다.
제한사항과 예시는 다음과 같다.
내가 처음에 생각해낸 코드는
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
내생각은.. 이 문제가 한명의 낙오자여서 이 코드가 먹힌것 같다.. 여러명이면 안먹힐듯.. 그래서 더 생각하는데 애를 먹었다.
'코딩 공부 > 프로그래머스' 카테고리의 다른 글
코딩연습 프로그래머스_ 문자열 다루기 기본 파이썬 (0) | 2021.01.16 |
---|---|
코딩연습 프로그래머스_ 전화번호 가리기 (0) | 2021.01.14 |
코딩연습 프로그래머스_2016년 (0) | 2021.01.14 |
코딩연습 프로그래머스_자릿수 더하기 (0) | 2021.01.13 |
코딩 연습 프로그래머스_가운데 문자열 출력하기 (0) | 2021.01.12 |