본문 바로가기
TIL - 프로그래밍/Python 알고리즘

이것이 취업을 위한 코딩 테스트다 CHAPTER 14 정렬 문제

by chaemj97 2023. 4. 9.
728x90
Q 23. 국영수
'''
    Chapter 14. 국영수

    접근법 1
        국어 내림차순, 영어 오름차순, 수학 내림차순, 이름 오름차순으로 정렬
'''
import sys
input = sys.stdin.readline

# 도현이네 반의 학생 수
N = int(input())
# 학생 성적
student = [input().split() for _ in range(N)]
# 국어 내림차순, 영어 오름차순, 수학 내림차순, 이름 오름차순
student.sort(key=lambda x:(-int(x[1]),int(x[2]),-int(x[3]),x[0]))
for s in student:
    print(s[0])

 

Q 24. 안테나
'''
    Chapter 14. 안테나

    접근법 1
        중간에 있는 집에 설치할 때 거리의 총 합이 최소다.
        중간 집에서 멀어질 수록 거리의 총 합이 커진다.

'''
import sys
input = sys.stdin.readline

# 집의 수
N = int(input())
home = sorted(map(int,input().split()))

print(home[(N-1)//2])

 

Q 25. 실패율
'''
    Chapter 14. 실패율

    접근법 1
        각 스테이지의 사람 수를 구한다.
        스테이지 마다 실패율을 구한다.
        내림차순으로 정렬한다.

'''
def solution(N, stages):
    # 총 사용자 수
    user_cnt = len(stages)
    # 각 스테이지 사람 수 
    cnt = [0]*(N+2)
    for i in stages:
        cnt[i] += 1
        
    # 실패율
    f = []
    for i in range(1,N+1):
        # 스테이지에 도달한 플레이어가 없다면 실패율 0
        if user_cnt == 0:
            f.append([i,0])
        else:
            # [스테이지 번호, 실패율]
            f.append([i,cnt[i]/user_cnt])
            # 스테이지 클리어 못한 사람 제외
            user_cnt -= cnt[i]
    # 정렬
    f.sort(key=lambda x:x[1],reverse=True)
    answer = [idx for idx,v in f]
    return answer

 

Q 26. 카드 정렬하기
'''
    Chapter 14. 카드 정렬하기

    접근법 1
        최소 횟수로 비교하기 위해서 적은 수의 카드끼리 계산
        정렬 + 카드 2장 뽑기 + 2장 합해서 다시 넣기 반복 -> heapq
       
'''
import heapq
import sys
input = sys.stdin.readline

# N개의 숫자 카드 묶음
N = int(input())
card = [int(input()) for _ in range(N)]
heapq.heapify(card)

# 정답
answer = 0
for _ in range(N-1):
    # 제일 작은 카드
    first_card = heapq.heappop(card)
    # 두번째 작은 카드
    second_card = heapq.heappop(card)
    # 카드 정렬
    answer += first_card+second_card
    heapq.heappush(card,first_card+second_card)

print(answer)​
728x90
반응형

댓글