CODETAKA (1)

dhhyy·2021년 4월 9일
0

문제

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

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

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

풀이 과정 (생각)

  1. 가장 자주 등장하는 숫자를 k라는 인자의 개수만큼 return을 하는 과제인 것을 파악.

  2. 그럼 먼저 for문을 사용해 dictionary 형태로 만들어서 개수를 먼저 파악해 보기로 함.

  3. 그리고 빈 dictionary를 만들어서 for문의 결과를 저장

  4. 계속 시도를 해보다가, 검색 중에 lambda함수라는 것을 이용할 수 있다는 걸 알게 되고.. 걍 붙여씀...

  5. 그 후에 for문을 다시 돌려서, k의 개수만큼 돌려서, 리스트를 하나 만들어서 그 리스트에 추가를 하여 해결.

답안

def top_k(nums, k):
    # 여기에 코드를 입력해주세요
  dic = {}
  result = []

  for i in nums:
    dic[i] = nums.count(i)

  a = sorted(dic, key = lambda x : dic[x])

  for i in range(1, k+1):
    result.append(a.pop())
    
  return result

주요 문법 정리

  1. 빈 리스트를 만들어 선언하는 것.
  2. 빈 딕셔너리를 만들어 선언하는 것.
  3. for문을 사용하여 리스트를 딕셔너리로 변환하는 방법
list = [1,2,3,4,1,2,1,2,1,1,2,3,1,3,2,1]
dic = {} # 빈 딕셔너리 선언
for i in list: # for문 실행 
    dic[i] = list.count(i) 
# 딕셔너리의 기본 생김새는 { : } 이것임. 그럼 dic[i] 이 부분이 key값이 되는 것이고, list.count(i)부분이 value값이 되는 것이다
print(dic)
  1. list.count(i)
list = [1,2,3,4,1,2,1,2,1,1,2,3,1,3,2,1]

a = list.count(2)
print(a)

# 갯수를 반환
# str에도 사용 가능
  1. a = sorted(dic, key = lambda x : dic[x])

lambda식에서는 x[0]의 의미는 key값 기준으로 정렬을 의미. x[1]값을 기준으로 정렬을 의미.

a = sorted(dic, key = lambda x : dic[x])

lambda문법 사용에 대해

lambda 인자 / 표현식, 간단한 문법

함수로 처리를 할 수도 있으나, 밑의 lambda 문법에 적용을 하면 조금 짧게 표현을 할 수 있다

# lambda 인자 : 표현식

>>> def hap(x, y):
...   return x + y
...
>>> hap(10, 20)
30

>>> (lambda x,y: x + y)(10, 20)
30
# lambda 함수 안에, x, y를 정의해주고 해야할 식을 정해줌. 그리고 그 값을 정해줌.
  1. 최종값 뽑기
# append
# 리스트에 맨 뒤에 요소를 추가
for i in range(1, k+1):
		result.append(a.pop())
# for문을 사용하여 반복한다. 이때 아까 만든 result 리스트 안에 추가를 하는데, 뒤에서부터 추가를 한다. 
# 어차피 k만큼만 반복이 되는 것이기 때문에 k의 숫자대로 반복이 되어서 값이 리턴된다. 

주요 문법 정리 상세

  1. 정렬

sort / sorted를 간단하게 비교

sort는 원본 자체를 변경하고, sorted는 원본 자체를 변형하지 않음

간단한 오름차운 정렬을 하는 법 : sorted(), list.sort()

sort

list = [7,5,3,9,0,2,3,6]
list.sort()
print(list)

[0, 2, 3, 3, 5, 6, 7, 9]

sorted

list = [7,5,3,9,0,2,3,6]
a = sorted(list)
print(a)

[0, 2, 3, 3, 5, 6, 7, 9]

sorted / reverse=True

list = [7,5,3,9,0,2,3,6]
a = sorted(list, reverse=True)
print(a)

[9, 7, 6, 5, 3, 3, 2, 0]

내림차순으로 정렬

sorted 심화 / 단순 딕셔너리로 값 정렬

dic = {}
dic[3]='h'
dic[10]='c'
dic[4]='i'
dic[2]='d'
dic[9]='e'
dic[5]='b'
dic[1]='g'
dic[6]='f'
dic[8]='j'
dic[7]='a'

print(dic)

{3: 'h', 10: 'c', 4: 'i', 2: 'd', 9: 'e', 5: 'b', 1: 'g', 6: 'f', 8: 'j', 7: 'a'}

sorted 심화 / sorted(*.items())

key값으로 정렬이 되는 걸 확인

dic1 = sorted(dic.items())
print(dic1)

[(1, 'g'), (2, 'd'), (3, 'h'), (4, 'i'), (5, 'b'), (6, 'f'), (7, 'a'), (8, 'j'), (9, 'e'), (10, 'c')]

sorted 심화 / sorted(*.items())

reverse=True 사용하여 반대로 정렬 할 수 있음

dic1 = sorted(dic.items(), reverse=True)
print(dic1)

[(10, 'c'), (9, 'e'), (8, 'j'), (7, 'a'), (6, 'f'), (5, 'b'), (4, 'i'), (3, 'h'), (2, 'd'), (1, 'g')]

sorted 심화 / sorted(*.keys())

key값을 가져오고, 이걸 정렬 할 수 있음

dic1 = sorted(dic.keys())
print(dic1)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

참고사이트

https://wikidocs.net/64

https://ddolcat.tistory.com/677

profile
지뢰찾기 개발자

0개의 댓글