codekata #9

신승호·2021년 5월 6일

codekata

목록 보기
7/15

codekata_0506


문제

nums는 숫자로 이루어진 배열입니다.

가장 자주 등장한 숫자를 k 개수만큼 return 해주세요.

nums = [1,1,1,2,2,3],
k = 2

return [1,2]

nums = [1]
k = 1

return [1]

need to know

  1. codekata #7에 사용했던걸 응용해보자

문자로 짜봐

  1. 리스트안 숫자를 센 개수를 담을 빈리스트 만들고
  2. 최종 결과를 담을 빈 리스트 만들고
  3. 리스트에 있는 숫자중복 제거(set())해서 하나씩 for문 돌린다
  4. 들어온 숫자와, 들어온 숫자가 nums안에 들어있는 개수를 튜플로 리스트에 포함시키자
  5. 들여보낸 튜플리스트를 가장 큰 가장 많은 순서대로 솔팅, 저기 보니까[1]은 튜플의 2번째 인덱스를 기준으로 솔팅한다는 말
  6. 그후 k숫자를 포문에 넣고, 그에따른 리스트의 인덱스와 리스트안 튜플의 인덱스를 넣어서 리스트에 추가 후 출력 !

정답

def top_k(nums, k):
    nums_list = [] 				# 카운트 개수를 담을 빈리스트
    result = [] 				# 결과를 담을 빈 리스트
    for i in set(nums): 			# 리스트에 있는 숫자중복 제거해서 하나씩 for문 돌리기
        nums_list.append((i,nums.count(i))) 	# 들어온 숫자와, 들어온 숫자가 nums안에 들어있는 개수를 튜플로 리스트에 포함
    nums_list.sort(key=lambda x:-x[1]) 		# 들여보낸 튜플리스트를 가장 큰 가장 많은 순서대로 솔팅할껀데 저기 보니안[1]은 튜플의 2번째 인덱스를 기준으로 솔팅한다는 말
    for i in range(k): 				# k를 포문에 넣고
        result.append(nums_list[i][0]) 		# 그에따른 인덱스 넣기
    return result

참고

  • set()
  • nums_list.append((i,nums.count(i)))
  • (key=lambda x:-x[1])
  • nums_list[i][0]
profile
신승홉니다

0개의 댓글