[프로그래머스 Python] 코딩 기초 트레이닝 Day 21 - 함수(메서드)
1. 뒤에서 5등 위로
정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 제외한 수들을 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
제한사항
- 6 ≤ num_list의 길이 ≤ 30
- 1 ≤ num_list의 원소 ≤ 100
코드 작성
def solution(num_list):
return sorted(num_list)[5:]
2. 전국 대회 선발 고사
0번부터 n - 1번까지 n명의 학생 중 3명을 선발하는 전국 대회 선발 고사를 보았습니다. 등수가 높은 3명을 선발해야 하지만, 개인 사정으로 전국 대회에 참여하지 못하는 학생들이 있어 참여가 가능한 학생 중 등수가 높은 3명을 선발하기로 했습니다.
각 학생들의 선발 고사 등수를 담은 정수 배열 rank와 전국 대회 참여 가능 여부가 담긴 boolean 배열 attendance가 매개변수로 주어집니다. 전국 대회에 선발된 학생 번호들을 등수가 높은 순서대로 각각 a, b, c번이라고 할 때 10000 × a + 100 × b + c를 return 하는 solution 함수를 작성해 주세요.
제한사항
- 3 ≤ rank의 길이 = attendance의 길이 ≤ 100
- rank[i]는 i번 학생의 선발 고사 등수를 의미합니다.
- rank의 원소는 1부터 n까지의 정수로 모두 서로 다릅니다.
- attendance[i]는 i번 학생의 전국 대회 참석 가능 여부를 나타냅니다.
- attendance[i]가 true라면 참석 가능, false면 참석 불가능을 의미합니다.
- attendance의 원소 중 적어도 3개는 true입니다.
코드 작성
def solution(rank, attendance):
rank_idx = [(r, i) for i, r in enumerate(rank) if attendance[i]]
top3 = sorted([ri[0] for ri in rank_idx])[:3]
idx = []
for t in top3:
for ri in rank_idx:
if ri[0] == t:
idx.append(ri[1])
return 10000*idx[0] + 100*idx[1] + idx[2]
출력에 필요한 값은 등수가 아닌 처음에 주어진 rank 리스트 내의 인덱스(위치)이다. 이러한 이유로 참석이 가능한 학생들의 등수와 위치를 rank_idx에 튜플형태(값을 고정시키기 위함)로 저장하였다. 그리고 top3의 등수를 top3라는 리스트 내에 저장하였다. top3에 있는 등수가 첫 rank 리스트 내에서 몇 번째에 위치하고 있는지를 불러오기 위해 중첩된 반복문을 사용하였고 그 위치를 idx라는 리스트에 넣어주었다. 1등부터 3등까지의 인덱스값(위치)를 차례대로 리스트에 저장하였기 때문에 반환하는 과정에서 idx0, idx1, idx2를 그대로 사용하였다.
3. 정수 부분
실수 flo가 매개 변수로 주어질 때, flo의 정수 부분을 return하도록 solution 함수를 완성해주세요.
제한사항
- 0 ≤ flo ≤ 100
코드 작성
def solution(flo):
return int(flo)
4. 문자열 정수의 합
한 자리 정수로 이루어진 문자열 num_str이 주어질 때, 각 자리수의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- 3 ≤ num_str ≤ 100
코드 작성
def solution(num_str):
return sum([int(s) for s in num_str])
5. 문자열을 정수로 변환하기
숫자로만 이루어진 문자열 n_str이 주어질 때, n_str을 정수로 변환하여 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n_str ≤ 5
- n_str은 0부터 9까지의 정수 문자로만 이루어져 있습니다.
코드 작성
def solution(n_str):
return int(n_str)
📍 문제 출처
👩🏻💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.
댓글남기기