https://swexpertacademy.com/main/main.do
내 처음 계획은 다음과 같았다.
받은 수들을 split으로 쪼개서 map,list를 입혀준다.(arr)
→arr 리스트를 sort로 정렬
→arr 리스트를 세트로 만들어 다른 변수에 저장.(arr_set)
→빈 딕셔너리를 하나 만듦(cnt_dict) **cnt는 count를 임의로 줄인 것
→arr_set에 들어있는 요소들(score) 을 하나씩 cnt_dict의 key로 만들고 value로는 arr의 score count값으로 하자.
→cnt_dict가 모두 채워지면 cnt_dict의 value값들을 모아 최댓값을 구함. 그리고 그걸 max_num에 저장.
→result라는 변수를 하나 만들어주고 초깃값을 0으로 설정
→cnt_dict.items()를 해서 (value,key) 튜플들의 모음을 만들주고 for문을 이용해 각각의 value와 max_num을 비교.
만약 같으면 result 에 (value에 대응되는) key를 저장.그리고 멈춤
→프린트
그래서 가장 초반 코드는 다음과 같았다.(오답)
T = int(input())
for t in range(1,T+1):
N = int(input())
arr = list(map(int,input().split()))
arr.sort()
arr_set = set(arr)
cnt_dict = {}
for score in arr_set:
cnt = arr.count(score)
cnt_dict[str(score)] = cnt
max_num = max(cnt_dict.values())
result = 0
for key,value in cnt_dict.items():
if value==max_num:
result = key
break
print('#{} {}'.format(t,result))
결과는 fail이었다.
여기서 문제점은 최빈값이 여러개일 때, 가장 큰 값이 출력되어야 하는데 그러지 않았다는 것이다.
그래서 arr.reverse()를 추가해보았다.
T = int(input())
for t in range(1,T+1):
N = int(input())
arr = list(map(int,input().split()))
arr.sort()
arr.reverse()
arr_set = set(arr)
cnt_dict = {}
for score in arr_set:
cnt = arr.count(score)
cnt_dict[str(score)] = cnt
max_num = max(cnt_dict.values())
result = 0
for key,value in cnt_dict.items():
if value==max_num:
result = key
break
print('#{} {}'.format(t,result))
근데 그래도 fail이다. ㅋㅋ... 뭐가 문제지 생각하다가 새롭게 알게 된 사실이 있었다.
1.
set는 중복을 없애줄 뿐만 아니라 정렬도 해준다.(오름차순)
a = [8,9,5,4,3,2,3,3,9]
b = set(a)
print(b)
#{2, 3, 4, 5, 8, 9}
2.
set에서 sorted(set,reverse= True)를 해주면 내림차순으로 정렬되어 리스트로 반환된다.
a = {8,9,5,4,3,2,3,3,9}
a = sorted(a,reverse = True)
print(a)
#[9, 8, 5, 4, 3, 2]
두개의 답이 나왔다.
[1]
- 60,956 kb메모리
- 193 ms실행시간
T = int(input())
for t in range(1,T+1):
N = int(input())
arr = list(map(int,input().split()))
arr_set = set(arr)
arr_setli = sorted(list(arr_set),reverse=True)
cnt_dict = {}
for score in arr_setli:
cnt = arr.count(score)
cnt_dict[str(score)] = cnt
max_num = max(cnt_dict.values())
result = 0
for key,value in cnt_dict.items():
if value==max_num:
result = key
break
print('#{} {}'.format(N,result))
[2]
- 60,956 kb메모리
- 197 ms실행시간
T = int(input())
for t in range(1,T+1):
N = int(input())
arr = list(map(int,input().split()))
arr_set = sorted(set(arr),reverse=True)
cnt_dict = {}
for score in arr_set:
cnt = arr.count(score)
cnt_dict[str(score)] = cnt
max_num = max(cnt_dict.values())
result = 0
for key,value in cnt_dict.items():
if value==max_num:
result = key
break
print('#{} {}'.format(N,result))
리스트로 바꾸고 sort,reverse를 해줬냐 아님 세트 그대로 sort,reverse를 해줬냐 그 차이이다.
'Python > code problem' 카테고리의 다른 글
[sw expert academy] 4406. 모음이 보이지 않는 사람 (0) | 2022.01.19 |
---|---|
[sw expert academy] 3431. 준환이의 운동관리 (0) | 2022.01.19 |
[sw expert academy] 1984. 중간 평균값 구하기 (0) | 2022.01.18 |
[sw expert academy] 1946. 간단한 압축 풀기 (0) | 2022.01.15 |
[sw expert academy] 1983. 조교의 성적 매기기 (0) | 2022.01.15 |