SWEA/Python/D2/문제 해결 #6

1979. 단어는 어디에 들어갈 수 있습니까?

test_case = int(input())

for test in range(test_case):
    n, k = map(int, input().split())

    puzzle = ((0) * (n+2)) + ((0) + list(map(int, input().split())) + (0) for _ in range(n)) + ((0) * (n+2))

    hor_count_one = 0
    ver_count_one = 0
    res_count = 0

    for i in range(n + 2):
        for j in range(n + 2):
            if puzzle(i)(j) == 1:
                hor_count_one += 1
            else:
                if hor_count_one == k:
                    res_count += 1
                    hor_count_one = 0
                else:
                    hor_count_one = 0
            
            if puzzle(j)(i) == 1:
                ver_count_one += 1
            else:
                if ver_count_one == k:
                    res_count += 1
                    ver_count_one = 0
                else:
                    ver_count_one = 0

    print(f"#{test + 1} {res_count}")

연속된 수를 세는 방법의 문제로 대체하여 해결책을 제시할 수 있습니다.

연속된 것의 수를 세는 것 hor_count_one변수와 함께 ver_count_one명명된 변수를 사용하여 각 변수에 연속된 수를 저장할 수 있습니다.

퍼즐 끝에 1이 있으면 예외가 발생하므로 이 문제의 해결책은 입력 퍼즐 외부에 0으로 둘러싸인 패딩을 만들어 이 예외를 해결하는 것입니다.


1983. 조교 등급

test_case = int(input())

for test in range(test_case):
    n, k = map(int, input().split())
    score = ()
    alpt_score = ("A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0")

    for i in range(n):
        mid, fin, ass = map(int, input().split())
        score.append(mid * 0.35 + fin * 0.45 + ass * 0.20)

    k_score = score(k-1)
    score.sort(reverse=True)

    k_idx = score.index(k_score)

    for idx, alpt in enumerate(alpt_score):
        if k_idx < (idx+1) * n / 10:
            print(f"#{test + 1} {alpt}")
            break

입력된 각 점수를 주어진 점수 공식에 따라 계산하여 최종 점수를 산출합니다.

score 목록에 저장되도록 구성되어 있습니다.

k_score 결과를 원하는 순서대로 변수에 저장한 후, score 목록은 내림차순으로 정렬됩니다.

그리고 문제에 동등한 점수가 없다고 언급했으므로 그 점을 사용하십시오. k_idx 변수별로 정렬 score 목록에서 k_score 점수에 해당하는 순위가 저장되었습니다.

각 등급은 전체 인원의 10%만 받을 수 있기 때문에 이 부분은 for 문과 if 문을 활용하여 사용합니다.

k_idx와 비교 후 메모를 발행하면 문제가 해결되었습니다.


1984. 중간 평균 찾기

test_case = int(input())

for test in range(test_case):
    number = list(map(int, input().split()))

    number.remove(max(number))
    number.remove(min(number))

    print(f"#{test+1} {int(round(sum(number) / len(number), 0))}")

이 문제는 목록에서 원하는 값을 제거하는 방법을 알고 있으면 쉽게 해결됩니다.

최대값과 최소값을 제거하는 방법에는 여러 가지가 있지만 remove( ) 방법과 max( ), min( ) 함수를 함께 사용하여 목록에서 최대 값과 최소값을 제거하는 방법을 사용했습니다.