: 프로그래머스 코딩테스트 연습 Python 알고리즘별로 풀어보기
클릭해서 문제 전체 보기🔼
def solution(array, commands):
result = []
for i, j, k in commands:
newArr = sorted(array[i-1:j])
result.append(newArr[k-1])
return result
📢 풀이 설명
for문에서 i, j, k
를 바로 받을 수 있다는 걸 까먹지 마세용~
클릭해서 문제 전체 보기🔼
def solution(numbers):
if len(numbers) == 1: return str(numbers[0])
numbers = list(map(str, numbers))
numbers.sort(key = lambda x: x*3, reverse = True)
return str(int("".join(numbers))) # 원소가 0 뿐일 경우 방지
📢 풀이 설명
이 문제는 숫자 크기대로 정렬하면 안 되고, 각 원소의 1번 자리 - 2번 자리 - ...
를 봐야한다. 그래서 리스트 속 원소를 문자열로 바꿔서 비교해야한다.
이때 n번 자리까지 같아도 문자열 길이가 짧으면 작은 수로 판단된다.
이 문제에서 필요한 건 이 숫자들이 해당 자리에 왔을 때 가지는 값이기 때문에, 같은 조건에서 비교하기 위해 *3배하는 것이다.
3인 이유는, 각 원소는 1000 이하라고 했으니까 가장 긴 원소의 길이가 3이기 때문이다.
ex) "3", "34", "305"
일 때
1. 그냥 비교 => "3", "305", "34"
순서임
2. 3배 곱해 비교했을 때 => "333", "343434", "305305305" 이니까 "305", "3", "34"
순서임
클릭해서 문제 전체 보기🔼
def solution(citations):
result = 0
citations.sort(reverse = True)
for (idx, h) in enumerate(citations):
if h < (idx + 1): return result
result += 1
return result
📢 풀이 설명
논문들을 인용 많은 순으로 정렬하면 각 논문의 idx + 1
은 해당 논문 인용수 이상 인용된 논문들의 개수가 된다.
그 논문들을 for문으로 돌며, 논문의 인용수보다 idx가 작거나 같으면 result += 1을 하고, 커지게 되면 return한다.