갬미의 성장일기
[이것이 코딩테스트다] 14일차 - 백준 국영수, 안테나 | 프로그래머스 실패율 본문
본문은 [이것이 취업을 위한 코딩테스트다 - 나동빈] 책을 공부하고 작성한 글입니다.
Chapter 6 정렬
오늘 풀이한 문제 - 정렬 실전문제
1. [백준 10825] 국영수
문제
도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.
- 국어 점수가 감소하는 순서로
- 국어 점수가 같으면 영어 점수가 증가하는 순서로
- 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
- 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
n = 12
score_info = []
for i in range(n):
name, kr, math, eng = input().split()
score_info.append([name,int(kr), int(math), int(eng)])
score = sorted(score_info, key = lambda x: ( -x[1],x[2], -x[3], x[0]))
for name in score:
print (name[0])
접근 방법
- 람다로 여러 요소를 한번에 정렬할 수 있다는 걸 떠올리지 못해서 해답을 봤다 ㅜ
2. [백준 18310] 안테나
일직선 상의 마을에 여러 채의 집이 위치해 있다. 이중에서 특정 위치의 집에 특별히 한 개의 안테나를 설치하기로 결정했다.
효율성을 위해 안테나로부터 모든 집까지의 거리의 총 합이 최소가 되도록 설치하려고 한다.
이 때 안테나는 집이 위치한 곳에만 설치할 수 있고, 논리적으로 동일한 위치에 여러 개의 집이 존재하는 것이 가능하다.
집들의 위치 값이 주어질 때, 안테나를 설치할 위치를 선택하는 프로그램을 작성하시오.
예를 들어 N=4이고, 각 위치가 1, 5, 7, 9일 때를 가정하자.
이 경우 5의 위치에 설치했을 때, 안테나로부터 모든 집까지의 거리의 총 합이 (4+0+2+4)=10으로, 최소가 된다.
n = 4
home_list = [1,5,7,9]
home_list.sort()
print (home_list[(n-1)//2])
접근 방법
- 처음에는 평균을 이용하려 했는데 중앙값을 이용하는 방법이 있었다!! (훨씬 간단하고 빠름 ㅜㅜ)
3. [프로그래머스] 실패율
슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프렌즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다.
원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다.
이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라.
실패율은 다음과 같이 정의한다.
- 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하도록 solution 함수를 완성하라.
N | stage | result |
5 | [2, 1, 2, 6, 2, 4, 3, 3] | [3, 4, 2, 1, 5] |
4 | [4, 4, 4, 4, 4] | [4, 1, 2, 3] |
def solution(N, stages):
fail_list = []
user = len(stages)
for i in range(1, N+1):
if stages.count(i) == 0:
fail = 0
else:
fail = stages.count(i)/user
fail_list.append([i,fail])
user -= stages.count(i)
answer = [x for x,y in sorted(fail_list, key = lambda x:(-x[1], x[0]))]
return answer
접근 방법
- 이전에 한번 푼적이 있는 문제인데 더 간단하고 빠르게 풀수있는 방법을 생각해내서 기분이 좋았다
'Algorithm > Algorithm Study' 카테고리의 다른 글
[이것이 코딩테스트다] 15일차 - 순차탐색, 이진탐색, 트리자료구조 (0) | 2021.12.18 |
---|---|
[이것이 코딩테스트다] 15일차 - 우선순위 큐 | 백준 카드정렬하기 (0) | 2021.12.18 |
[이것이 코딩테스트다] 13일차 - 정렬 예제풀이 (0) | 2021.12.15 |
[이것이 코딩테스트다] 13일차 - 정렬 (0) | 2021.12.15 |
[이것이 코딩테스트다] 12일차 - 백준 연산자 끼워넣기, 인구이동 (0) | 2021.12.14 |