-
[Python] CodeUp 1420 : 3등 찾기코딩테스트/CodeUp 2024. 5. 27. 12:44
[문제 풀기 전 생각한 부분]
- 사용자로부터 n(반복할 횟수) 입력을 받는다.
- data = [] 빈 리스트를 초기화한다.
- name, score을 리스트 형태로 공백을 기준으로 입력 받는다.
- append() 함수를 사용해서 name과 score을 data에 저장한다.
- sort() 함수를 이용해서 정렬한 후.
- sort는 오름차순 정렬, 내림차순 정렬이 기억 안난다.
- 그냥 뒤집자.
- sort는 오름차순 정렬, 내림차순 정렬이 기억 안난다.
- 3번째 높은 점수인 사람만 출력하자.
[해결 과정 중 배운 사실]
append(),push() 함수는 **하나의 argument**만 받을 수 있다. ex) data.append(name) 두 개의 argument를 받으려면 **배열 형식**으로 받아주어야 한다. ex) data.append([name, scrore])
# append() 함수를 배열 형식으로 받았을 때 원하는 값 출력하기. n = int(input()) for i in range(n): name, score = list(input().split()) data.append([name, score]) print(data) print(data[0]) print(data[0][1]) # 입력 5 a 60 b 70 c 80 d 90 e 100 # 출력 [['a', '60'], ['b', '70'], ['c', '80'], ['d', '90'], ['e', '100']] ['a', '60'] 60
# sort : 오름차순 정렬 # sort(reverse =True) 내림차순 정렬 # 그럼 data.sort(reverse=True)는 어떤 값을 가지게 될까? # 입력 3 a 80 b 70 c 75 # 출력 [['c', '75'], ['b', '70'], ['a', '80']] # 즉 배열의 앞 부분만 생각해서 정렬이 된다.
[my_code]
n =int(input()) data = [] for i in range(n): name, score = list(input().split()) data.append([name, score]) data.sort(reverse=True) print(data) print(data[2][1])
[문제점]
- 내림차순 정렬이 점수가 아닌 알파벳에 의해 결정됨.
- score을 문자열로 저장하게 뒀다.
- print(data[2][1] 은 점수를 출력하는 것이다.
- 근데 사실 위 코드는 어떻게 나오는 지 보기 위함이다.
[문제점 해결]
- 정렬을 할 때 lamda를 사용해보자.
lambda란 특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있다.
# 일반적인 메서드 사용 def add(a,b): return a + b print(add(3,7)) # 실행결과 10
# lamda 메서드 사용 print(lambda a, b: a+b)(3,7)) # 실행결과 10
n =int(input()) data = [] for i in range(n): name, score = list(input().split()) data.append([name, score]) print(sorted(data, key=lambda x : x[1]), reverse =True) # 입력 5 a 30 b 40 c 50 d 10 e 5 # 실행결과 [['c', 50], ['b', 40], ['a', 30], ['d', 10], ['e', 5]]
- 위와 같은 사실을 알고 이게 3번 째로 점수가 높은 name을 출력해주면 된다.
- lambda x : x[1] 의 의미
- 리스트의 각 요소를 처리하기 위한 람다 함수
- x 는 리스트의 각 요소를 나타낸다. data 리스트의 경우, 각 요소는 (name,score) 형태의 튜플이다.
- x[1] 은 각 요소의 두 번째 값, 즉 점수를 나타낸다.
- 리스트의 각 요소를 처리하기 위한 람다 함수
n =int(input()) data = [] for i in range(n): name, score = list(input().split()) score = int(score) data.append([name, score]) data = sorted(data, key=lambda x: x[1], reverse=True) print(data[2][0])
[더 생각해보기]
- name, score = list(input().split()) 굳이 list를 써야되나?
- 쓰지 않아도 된다.
- data.append([name,score]) 이 부분에 의해 list안의 list로 저장된다.
- data.append((name,score)) [] 를 () 로 바꾸면 list안의 튜플로써 저장이 됨.
- list 와 tuple 의 차이 .
- 대부분 같고, tuple은 불변성을 가진다. (=못바꿈)
- 튜플이 더 적은 메모리를 차지함.
- 따라서 값이 안 바뀌게 ex) JS- const 처럼 , 좀 더 안정적으로 프로그래밍 할 수 있겠다.
- 여기서는 값이 변할 필요가 없으니, 튜플을 사용하는 것이 나아 보인다.
'코딩테스트 > CodeUp' 카테고리의 다른 글
[Python] CodeUp 1406 : love (0) 2024.05.27 [Python] CodeUp 1409 : 기억력 테스트 1 (0) 2024.05.27 [Python] 6098 기초-리스트 : 성실한 개미 (0) 2024.05.23 [Python] 6097 : 기초-리스트 설탕과자 뽑기 (0) 2024.05.22 [Python] 6096 : 기초 리스트 바둑알 십자 뒤집기 (0) 2024.05.22