[programmers-python] 정렬
K번째 수
sort 함수를 쓰면 안된다거나 그런 거일줄 알았는데 잘된다!
def solution(array, commands):
answer = []
for cmd in commands:
s = sorted(array[cmd[0]-1:cmd[1]])
answer.append(s[cmd[2]-1])
return answer
가장 큰 수
첫 번째 시도
문자열로 바꿔서 비교하면 a = "21"
,b = "101"
일 때 a>b
이기 때문에 sort 대신 문자열로 비교하면 될 거라고 생각했다.
버블정렬을 이용했다.
def solution(numbers):
# 로직의 개수
for index in range(len(numbers)):
swap = 0
# 인접한 numbers 체크
for index2 in range(len(numbers)-1-index):
if str(numbers[index2]) < str(numbers[index2+1]):
numbers[index2], numbers[index2+1] = numbers[index2+1], numbers[index2]
swap +=1
if swap == 0:
break
answer = "".join(map(str, numbers))
return answer
a = "30"
, b = "3"
일 때는 a>b
임을 간과한 코드여서 2번째 케이스에서 바로 오류가 났다.
최종 정답
안풀려서 다른 사람 코드를 봤다.
def solution(numbers):
numbers = sorted(list(map(str, numbers)), key=lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
문자열은 숫자형과 달리 첫 글자가 큰 순서대로, 문자열의 길이가 긴 순서대로 크기 비교가 가능한 것을 이용한 코드다.
a="30",b="3"
일 때는 a>b
로 나오지만 a="303030", b="333"
일 때는 a<b
로 결과를 내기때문에 원소를 문자열로 바꾼 후 3씩 곱해준 것.
H-Index
첫 번째 시도
test case에서 에러났다.
def solution(citations):
answer = 0
citations = sorted(citations, reverse=True)
for h in range(len(citations), 0, -1):
checkH = 0
for index in citations:
if index >= h:
checkH += 1
else:
break
if checkH == h:
answer = h
break
return answer
최종 정답
못풀어서 다른 코드를 참고했다.
아래 코드가 좋아요를 가장 많이 받은 풀이 방법이다.
def solution(citations):
citations = sorted(citations)
l = len(citations)
for i in range(l):
if citations[i] >= l-i:
return l-i
return 0
Reference
Author And Source
이 문제에 관하여([programmers-python] 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dchecheb/programmers-정렬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)