본문 바로가기
CS/알고리즘

[이코테] 정렬 - 국영수

by 데브겸 2023. 2. 11.

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])))