반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pw_-KAdcDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


# 1984. 중간 평균값 구하기

T = int(input())

for tc in range(1, T+1):
    num = list(map(int,input().split()))
    min_num = 10000
    max_num = 0

    for i in num:
        if min_num > i:
            min_num = i
        if max_num < i:
            max_num = i
    num.remove(min_num)
    # print(num)
    num.remove(max_num)
    # print(num)

    add = 0


    for i in num:
        add += i
    ans = add/len(num)

    print('#{} {:.0f}'.format(tc,ans))

num에서 최소값과 최대값을 빼기 위해 remove 메서드를 이용했다

처음에 pop을 이용해서 삭제하려고 했는데

remove(값)

pop(인덱스)

라는걸 잊고 pop(값)을 해줘서 계속 인덱스 오류가 발생했다.

만약 pop을 이용하려면 num리스트를 정렬한 후 가장 첫번째 값과 맨 끝값을 pop으로 삭제할 수 있었을 것 같다.

반응형
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PwGK6AcIDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


# 1983. 조교의 성적 매기기
grade = ['A+', 'A0', 'A-', 'B+', 'B0', 'B-', 'C+', 'C0', 'C-', 'D0']
T = int(input())
for tc in range(1, T+1):
    N, K = map(int,input().split())
    score_list = []
    sort_list = []
    for i in range(N):
        m_test, f_test, hw = map(int, input().split())
        score = (0.35*m_test + 0.45*f_test + 0.2*hw)
        score_list.append(score)
        sort_list.append(score)


    # score_list 정렬
    for i in range(N):
        for j in range(i,N):
            if sort_list[i] < sort_list[j]:
                sort_list[i],sort_list[j] = sort_list[j], sort_list[i]

    for i in range(N):
        if sort_list[i] == score_list[K-1]:
            grade_idx = i//(N//10)

            print('#{} {}'.format(tc, grade[grade_idx]))

알고리즘을 처음 접할 무렵 어떻게 해서도 풀 수 없었던 문제를 지금 풀게 되어 너무 기쁘다

이 문제도 풀면서 문제가 많았는데

나는 score_list와 sort_list로 받아온 점수와 그것을 정렬한 점수 리스트를 나누어서 K가 몇등인지 알아내려고 했다

어차피 sort_list를 받기 위해서는 score_list를 받아오고 그걸 정렬해야해서

sort_list = score_list

이렇게 처음 sort_list를 받아온 후 정렬을 했는데 이런식으로 정렬을 진행하면 sort_list를 정렬 한 후

score_list도 sort_list와 같이 정렬이 되어버린다는 문제가 생긴다

 

리스트 호출에 대한 개념이 부족해서 생긴 실수다. 이론 공부를 해야겠다

반응형
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13zo1KAAACFAYh 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


카운팅 알고리즘을 이용해서 풀이

2021.08.23 - [분류 전체보기] - [알고리즘] 카운팅정렬 이해하기


# [s/w 문제해결 기본] 1일차 - 최빈수 구하기

T = int(input())

for tc in range(1, T+1):
    test_case = int(input())
    score_list = list(map(int,input().split()))
    max_num = 0
    max_idx = 0

    counts = [0] * 101

    for i in range(1000):
        counts[score_list[i]] += 1
    # print(counts)

    for i in range(101):
        if counts[i] >= max_num:
            max_num = counts[i]
            max_idx = i
    print('#{} {}'.format(tc, max_idx))

처음에 큰 수의 index를 받기 위해 

    for i in range(101):
        if counts[i] >= max_num:
            max_num = counts[i]
            max_idx = score_list.index(max_num)
    print('#{} {}'.format(tc, max_idx))

이 방법을 이용해서 풀었는데 이렇게되면 max_num은 큰 인덱스 값을 가리칠지언정 max_idx가 가져오는 값은 결국 'max_num과 같은 값을 가지고 있는 가장 작은 값'이 나오기 때문에 문제에서 주어지는

단, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라

조건을 지킬 수 없다

 

index값을 어떻게 받아올 수 있을지 리스트를 뒤에서부터 정렬도 해보고 별짓을 다 했는데

결론은 그냥 i 값을 받아오면 되는거였다.

반응형

+ Recent posts