ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] CodeUp 1420 : 3등 찾기
    코딩테스트/CodeUp 2024. 5. 27. 12:44

    문제 : 3등 찾기

    [문제 풀기 전 생각한 부분]

    1. 사용자로부터 n(반복할 횟수) 입력을 받는다.
    2. data = [] 빈 리스트를 초기화한다.
    3. name, score을 리스트 형태로 공백을 기준으로 입력 받는다.
    4. append() 함수를 사용해서 name과 score을 data에 저장한다.
    5. sort() 함수를 이용해서 정렬한 후.
      1. sort는 오름차순 정렬, 내림차순 정렬이 기억 안난다.
        1. 그냥 뒤집자.
    6. 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 처럼 , 좀 더 안정적으로 프로그래밍 할 수 있겠다.
      • 여기서는 값이 변할 필요가 없으니, 튜플을 사용하는 것이 나아 보인다.
Designed by Tistory.