[CodeKata] 배열에서 과반수가 넘는 숫자
첫번째 풀이
1 2 3 4 5 6 7 8 9 10 | def more_than_half(nums): # 아래 코드를 입력해주세요. dic = {} # 숫자와, 그것의 출현횟수 알기 위해 딕셔너리만듬 for i in set(nums): # 배열 안 숫자들(집합)을 for로 돌려서, dic[i] = nums.count(i) # 숫자와(키), 그것의 출현횟수(값) 딕셔너리에 담음 max_value = max(dic.values()) # 딕셔너리 값들 중 제일 큰 값 for j in dic.keys(): # 딕셔너리의 키들 중 if dic[j] == max_value: # 해당 딕셔너리키가 제일큰값의 키면 return j # 리턴해라 조 |
좀 난잡하게 풀었습니다. set로 nums안 숫자를 추린후, 딕셔너리에 숫자와 그것의 출현횟수를 담고, 딕셔너리의 키 중 가장 큰 value를 가진 키를 리턴해주었습니다.
두번째 풀이
1 2 3 4 5 | def more_than_half(nums): dic = {} for i in set(nums): dic[i] = nums.count(i) return [k for k,v in dic.items() if max(dic.values()) == v][0] |
풀이 방식은 같은데, 코드가 훨씬 깔끔해졌습니다.
특히, 딕셔너리에서 가장 큰 값을 가진 키를 불러오는 법을 리스트 컴프리헨션 을 가지고 수행했는데, 신선한 접근이었습니다.
리스트 컴프리헨션을 만들며 고생을 좀 했는데, 왜냐면 k,v in dic 이런식으로 dic.items()가 아닌 딕셔너리 자체를 썼기 때문이다.
dic.itmes()를 프린트해보면 이와 같습니다. 리스트 안에 튜플이 담기는데, 튜플의 앞의 값은 키이고/ 뒤의 값은 1입니다.
만약 이 튜플값을 리턴하고 싶으면,
def func_1(num1,num2): return num1,num2 result1, result2= func_1(10,20) print(result1) >>10 print(result2)>>20
이런식으로 각각의 변수에 담아 서 각각의 값을 리턴 받을 수도 있다.