1. 내 풀이
n = int(input())
data = []
for i in range(n):
data.append((input().split()))
data = sorted(data, key=lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0]))
for i in range(n):
print(data[i][0], end='\n')
다시보니 input().split()를 다시 한 번 ()로 묶어줄 필요가 없었는데 저렇게 했네
for i in range에서도 i를 쓰지 않으니까 _로 처리 가능했기도 하고
굳이 end='\n'이 아니더라도 그냥 했어도 됐는데,,, end=' ' 이거 의식하다가 저렇게 쓴듯
1-1. 풀이 도중 생각
1) sort(key=lambda)쓰면 쉽게 풀 수 있을 것 같다
2) 음... 우선 다 문자열로 집어넣고 필요한 값만 int 변환해서 써도 괜찮을 것 같은데? (어짜피 최종 출력은 이름으로 하니까)
- 입력에서 문자열 숫자 섞여있을 때 미리 처리해서 리스트에 집어넣는 방법은 없을까?
3) 와 점수는 할 수 있을 것 같은데 문자열은 어떻게 하냐? --> x[0] 시도해보고 이게 되네...?
2. 정답
n = int(input())
students = []
for _ in range(n):
students.append(input().split())
students.sort(key=lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0]))
for student in students:
print(student[0])
3. 새로 알게 된 것 or 새삼 깨닫게 된 것
1) sort는 숫자, 문자 상관없이 오름차순으로 정렬. 문자에서 대소문자가 섞여 있을 경우 대문자 오름차순 -> 소문자 오름차순으로 정렬된다. 이유는 문자를 아스키코드 값을 기준으로 정렬하고, 대문자의 아스키코드가 소문자의 아스키 코드보다 작기 때문
2) 데이터 넣을 때 한 번에 str int 처리해서 넣는 코드
array = []
for i in range(n):
score = input().split()
array.append((score[0], int(score[1]), int(score[2]), int(score[3])))
'CS > 알고리즘' 카테고리의 다른 글
[이코테] 실패율 (0) | 2023.02.12 |
---|---|
[이코테] 정렬 - 안테나 (0) | 2023.02.12 |
[이코테] 정렬 - 두 배열의 원소 교체 (0) | 2023.02.10 |
[이코테] 정렬 - 성적이 낮은 순서로 학생 출력하기 (0) | 2023.02.09 |
[이코테] 정렬 - 위에서 아래로 (0) | 2023.02.08 |