<로직 고민>
# for문을 써서 값을 하나씩 꺼낸다
# 배열 길이의 변수들을 생성한다?
# 변수들에 각 값을 넣는다 값이 들어간 변수 중에 같은 값이 있으면 그 변수에 값을 추가한다
# 변수 중 길이가 제일 긴 변수를 찾는다
# 길이가 긴 변수가 2개 이상이면 -1을 반환
# 배열 길이가 1이면 그 값을 반환 if문을 먼저 써야겠군
- 이렇게 로직을 짜긴 했는데 도저히 어떻게 코드를 만들어야 할지 모르겠어서 결국 힌트를 봤다
- 방향이 조금 틀린 거 같다
- 힌트를 토대로 로직을 다시 만들어봤다
# 배열 길이의 변수들을 생성한다? -> 카운트 딕셔너리를 생성!!
# for문으로 배열에서 값을 하나씩 꺼낸다
# 카운트 딕셔너리 키값에 배열의 값이 없으면 그 값으로 키값을 추가하고 밸류는 1로 한다
# 배열 값이 계속 도는데 값이 카운트 딕셔너리의 키값과 같은 게 있다면 해당 키의 밸류에 1을 더해준다
# for문이 다 돌면 딕셔너리가 완성되고 키값은 배열에 있는 값들(중복x)이 되고 밸류는 그 값들이 몇 개씩 들어있는지 들어가있다
# 그 딕셔너리에 밸류값만 가져와서 가장 높은 숫자를 찾는다 그 숫자의 키값을 반환한다
# 가장 높은 숫자가 2개 이상이면 -1을 반환한다
# 배열 길이가 1이면 그 값을 반환 if문을 먼저 써야겠군
- count 딕셔너리 생성까지는 했는데 밸류값 비교하는 것이 막혀서 다시 한 번 힌트를 봤다....
- 딕셔너리 생성이 끝이 아니고 앞에 값들을 정렬해줘야 하는 것이 필요했다,,,,
- 밸류를 기준으로 내림차순 정렬해야 하는데 방법을 몰라서 구글에 '파이썬 sorted dict'로 검색했다
- Python - dict 정렬 (Key, Value로 sorting) (codechacha.com)
- 여기서 방법을 찾았다
sorted_dict = sorted(my_dict.items(), key = lambda item: item[1], reverse = True)
print(sorted_dict)
- 중간코드
def solution(array):
# answer = 0
count = {}
for i in array:
if i not in count:
count[i] = 1
else:
count[i] += 1
sorted_count = sorted(
count.items(), key=lambda item: item[1], reverse=True)
print(sorted_count)
a = [2, 5, 13, 5, 1, 2, 13]
solution(a)
# 출력화면
# [(2, 2), (5, 2), (13, 2), (1, 1)]
- 이제 여기서 높은 밸류가 1개면 그 값 반환, 2개 이상이면 -1을 반환하면 된다
- 근데 그 전에 배열의 길이가 1 보다 큰지 조건문을 걸어준다 1보다 크다가 False이면 딕셔너리의 첫 번째 밸류값을 반환한다
<완성한 코드>
def solution(array):
answer = 0
count = {}
for i in array:
if i not in count:
count[i] = 1
else:
count[i] += 1
sorted_count = sorted(
count.items(), key=lambda item: item[1], reverse=True)
if len(sorted_count) > 1:
if sorted_count[0][1] != sorted_count[1][1]:
answer = sorted_count[0][0]
else:
answer = -1
else:
answer = sorted_count[0][0]
return answer
a = [2, 5, 13, 5, 1, 2, 13]
print(solution(a))
# 출력화면
# -1
- 이 문제만 지금 몇 분만에 푼 거지...??
- 거의 1시간 된 거 같은데 ^^;;;;
- 열심히 해야겠따,,,
- 근데 이것도 내 힘으로 온전히 했다기보다 힌트 보고 거의 베낀 거나 다름 없......다..
- 물론 보고 그대로 따라 쓴 게 아니라 힌트 보고 이래서 이렇게 하는구나 이해하고 안 보고 코드 짠 거긴 한데...!!
- 다음엔 힌트를 최대한 안 보고 풀었음 좋겠당,,,