▼ 문제 바로가기 (링크) ▼
https://leetcode.com/problems/sort-the-people/
길이가 같은 두 리스트 names, heights가 주어진다.
names[i] 의 키는 heights[i] 다.
키가 큰 순서대로 정렬해서 이름만 리스트로 반환하는 문제.
class Solution:
def sortPeople(self, names: List[str], heights: List[int]) -> List[str]:
user = dict(zip(heights, names)) # 두 리스트를 딕셔너리로 저장
tallest = sorted(user.keys(), reverse = True)
answer = list(tallest.values())
return answer
# 실행 결과 (오류)
AttributeError: 'list' object has no attribute 'values'
answer = list(tallest.values())
우선 두 리스트를 key:value 형태로 묶었다.
키를 기준으로 정렬해야하므로 키,이름순서로 작성.
zip()은 iterable(반복가능한) 객체를 인자로 받고 두 요소를 순서대로 엮어준다.
이름을 리스트로 반환하는 부분에서 오류.
리스트 객체에는 values 속성이 없다고.. 음..
class Solution:
def sortPeople(self, names: List[str], heights: List[int]) -> List[str]:
user = dict(zip(names, heights)) # 두 리스트를 딕셔너리로 저장
# 람다식을 통해 정렬 기준을 설정. 키-값에서의 키와는 다름.
# 키와 값 두 개 중 뒤에있는 값을 기준으로 정렬하므로 1을 입력
user = sorted(user.items(), key=lambda x: x[1], reverse=True)
# print(user) [('Mary', 180), ('Emma', 170), ('John', 165)]
answer = []
for i in user:
answer.append(i[0])
return answer
딕셔너리 출력과 람다 표현식 검색해서 해결! (인 줄 알았으나..)
class Solution:
def sortPeople(self, names: List[str], heights: List[int]) -> List[str]:
user = dict(zip(names, heights))
user = sorted(user.items(), key=lambda x: x[1], reverse=True)
answer = []
for i in user:
answer.append(i[0])
return answer
이 상태로 제출했더니 아래처럼 오류가.
Wrong Answer
Input
["Alice","Bob","Bob"]
[155,185,150]
Output
["Alice","Bob"]
Expected
["Bob","Alice","Bob"]
zip으로 합칠 때 가운데 Bob이 185와 함께 증발하는 문제가..
왜 그러지.. 곰곰히 생각해보니
key 값은 유일해야하는데 같은 이름이 있으니 뒤의 key로 덮어씌워져서..!
그럼 이제 어떻게 예외처리 해야 하나 검색해봤는데.. 잘 안 나온다 ..
https://kangprog.tistory.com/27 이건 딕셔너리의 키 값 중복을 클래스로
객체화 시켜서 해결한 경우. 음..!
이거 말고 좀 다른 방식으로 해결할 수는 없나..
게더 스터디에서 엉엉 울고 있었더니 코창님이 도와주셨다 ㅋㅋㅋㅋ
class Solution:
def sortPeople(self, names: List[str], heights: List[int]) -> List[str]:
user = zip(heights, names)
user = sorted(user, reverse=True)
answer = []
for i in range(len(names)):
answer.append(user[i][1])
return answer
도와주신 코드 ㅎㅎ.... zip을 단독으로 쓸 수 있는 줄 몰랐다!!!
뭔가 두 값이 연결된 상태로 정렬하고 출력해야하니까
무조건 딕셔너리 활용해서 해결해야 하는 줄 .. 뭔가 좀 허무하지만 후련하다.
마이크 켜고 해설까지 해 주셔서 감사합니다.. 하하하..
'코딩 테스트 > leetCode' 카테고리의 다른 글
[leetCode] 645. Set Mismatch (Python) (0) | 2022.10.23 |
---|---|
[leetCode] 2006. Count Number of Pairs With Absolute Difference K (Python) (0) | 2022.10.22 |
[leetCode]1688. Count of Matches in Tournament (Python) (0) | 2022.10.21 |
[leetCode] 1791. Find Center of Star Graph (Python) (0) | 2022.10.21 |
[leetCode] 2367. Number of Arithmetic Triplets (Python) (0) | 2022.10.20 |