정렬 문제 풀이

백준 - 10825번 국영수

문제

lambda를 활용하여 쉽게 풀 수 있었다.

lambda 매개변수 : 표현식
score.sort(key = lambda x : (-x[1],x[2],-x[3],x[0]))
-> -가 붙으면 내림차순 정렬한다.
=> 문제 조건에 맞춰 코드를 작성했다.
x[1]을 내림차순 정렬하는데 같은 값이 나올 경우 x[2]를 오름차순 정렬하고 앞에 두 값이 같을 경우 x[3]를 기준으로 내림차순 정렬하고 국영수 모든 값이 같을 경우 x[0]값을 기준으로 오름차순 정렬한다.

# 국영수
import sys

n = int(sys.stdin.readline().strip())
score = []
for _ in range(n):
    tmp = sys.stdin.readline().split()
    tmp[1] = int(tmp[1])
    tmp[2] = int(tmp[2])
    tmp[3] = int(tmp[3])
    score.append(tmp)
score.sort(key = lambda x: (-x[1],x[2],-x[3],x[0]))
for i in range(n):
    print(score[i][0])

백준 - 18310번 안테나

문제

몇 가지 경우를 그려보면 안테나를 중앙에 설치해야 한다는 것을 알 수 있다.

# 안테나
import sys
n = int(sys.stdin.readline().strip())
house = list(map(int,sys.stdin.readline().split()))
house.sort()
if n % 2 == 0:
    print(house[n//2-1])
else:
    print(house[n//2])

백준 - 1715번 카드 정렬하기

문제

작은 값 2개를 계속 더해주는 과정이기 때문에 우선순위 큐를 활용하여 문제를 해결하였다.

우선순위 큐
from queue import PriorityQueue
q = PriorityQueue()
입력 - q.put() 우선순위를 추가적으로 지정해줄 수 있음
출력 - q.get() 최솟값 반환
큐 사이즈 - q.qsize()

# 카드 정렬하기
import sys
from queue import PriorityQueue

q = PriorityQueue()

n = int(sys.stdin.readline().strip())
for _ in range(n):
    q.put(int(sys.stdin.readline().strip()))

result = 0
while q.qsize() > 1:
    tmp1 = q.get()
    tmp2 = q.get()
    tmp = tmp1 + tmp2
    result += tmp
    q.put(tmp)

print(result)

pypy가 더 빠르다고 알고 있어서 시간초과 방지를 위해 pypy로 제출하였는데
같은 코드임에도 불구하고 pypy는 시간초과가 발생했고 python은 시간초과가 발생하지 않았다.
이유가 뭔지 궁금하다...

프로그래머스 - 2019 KAKAO BLIND RECRUITMENT 실패율

문제

문제에서 주어진 공식대로 실패율을 계산한 뒤 해당 값을 내림차순으로 출력하면 되는 간단한 문제였다.

런타임에러

def solution(N,stages):
    result = []
    stage = [stages.count(i+1) for i in range(N)]
    tmp = 0
    player = len(stages)
    for i in range(N):
        result.append((i+1,stage[i]/(player-tmp)))
        tmp += stage[i]
    result.sort(key = lambda x : -x[1])
    answer = [x[0] for x in result]
    return answer


성공

def solution(N,stages):
    result = []
    stage = [stages.count(i+1) for i in range(N)]
    tmp = 0
    player = len(stages)
    for i in range(N):
        print(i)
        divide = player-tmp
        if divide != 0:
            result.append((i+1,stage[i]/(player-tmp)))
        else:
            result.append((i+1,0))
        tmp += stage[i]
    result.sort(key = lambda x : -x[1])
    answer = [x[0] for x in result]
    print(result)
    return answer

division by zero로 인해 런타임 에러가 발생하는 부분을 수정하였다.

좋은 웹페이지 즐겨찾기