아 뭔가 쉬운 것 같은데 못 풀어서 속상했다
1. 내 풀이
우선 아래 풀이는 틀렸다. 점수가 중복되는 인원이 존재할 경우 그 인원을 중복해서 출력하기 때문
n = int(input())
data = {}
for i in range(n):
tmp = input().split()
data[tmp[0]] = int(tmp[1])
score_chart = sorted(list(data.values()))
for i in range(len(score_chart)):
val = score_chart[i]
for k, v in data.items():
if v == val:
print(k, end= ' ')
1-1. 풀이 도중 생각
1) sorted에 key를 사용하는 방법을 찾아보려 했으나,,, 사용 방법을 몰라 풀지 못했다
2) dict 자체를 sort할 수는 없을 것 같고, 점수가 동일한 학생들은 자유롭게 출력해도 되니까 점수만 있는 리스트를 만들어서 sort하고, 그 점수에 맞는 학생들을 추출해야지
2. 정답
정답에는 sorted에 key를 이용하는 방법을 활용했다.
n = int(input())
data = []
for i in range(n):
input_data = input().split()
data.append((input_data[0], int(input_data[1])))
data = sorted(data, key=lambda student:student[1])
for student in data:
print(student[0], end=' ')
3. 새로 알게 된 것 or 새삼 깨닫게 된 것
1) sort, sorted에서 key 사용방법: labda를 이용하여 어떤 요소를 활용할 것인지 설정할 수 있다
- '-'를 붙이면 현재 정렬차순과 반대로 정렬한다
- 다중 조건을 설정할 경우 조건의 순서대로 넣고 ()로 묶어준다
# (이름, 학번, 점수)
data = [("홍길동", 1, 100) , ("이순신", 2, 50), ("심사임당", 3, 50),("이성계", 4, 75)]
# 점수를 기준으로 오름차순 정렬, 같은 점수라면 학번을 내림차순으로 정렬
print(sorted(data, key = lambda x: (x[2], -x[1])))
>>> [("심사임당", 3, 50), ("이순신", 2, 50),("이성계", 4, 75), ("홍길동", 1, 100)]
2) 딕셔너리에서 value로 key 찾는 법
data = {"홍길동":100, "이순신":75, "심사임당":75}
# 1번 방법: .items() 사용하기
[k for k, v in data.items() if v == 100]
>>> ["홍길동"]
# 2번 방법: key-value를 뒤집어 저장해놓고 찾기 (이게 좀 더 효율적)
r_data = {v:k for k, v in data.items()}
r_data.get(100)
>>> "홍길동"
'CS > 알고리즘' 카테고리의 다른 글
[이코테] 정렬 - 국영수 (0) | 2023.02.11 |
---|---|
[이코테] 정렬 - 두 배열의 원소 교체 (0) | 2023.02.10 |
[이코테] 정렬 - 위에서 아래로 (0) | 2023.02.08 |
[이코테] DFS & BFS - 미로 탈출 (0) | 2023.02.03 |
[이코테] DFS, BFS - 음료수 얼려먹기 (0) | 2023.02.02 |