BOJ - 2456번 나는 학급회장이다 (Python)

woga·2021년 1월 14일
0

python 풀이

목록 보기
15/27
post-thumbnail

문제 출처: https://www.acmicpc.net/problem/2456

난이도

Bronze 1


문제 풀이

처음에 일일이 구현하다가 조건문 때문에 빡코딩이 됐다. 그래서 이를 해결하기 위해 값을 제곱해서 더해주는 배열을 하나 더 생성해서 이를 비교했다.
그럼에도 제곱끼리도 같으면 회장을 선출할 수 없는 경우라 0과 최고 점수를 출력하도록 했다.


통과 코드

if __name__ == '__main__':
    N = int(input())
    arr1 = [0]*3 # 후보마다 점수 합산 배열
    arr2 = [0]*3 # 점수 같을 경우를 쉽게 파악하기 위해 선호도 점수를 제곱해서 합산한 배열
    
    for _ in range(N):
        x,y,z = map(int,input().split())
        #후보마다 점수 더해주기
        arr1[0] += x
        arr1[1] += y
        arr1[2] += z
        #제곱해서 더해주기
        arr2[0] += (x * x)
        arr2[1] += (y * y)
        arr2[2] += (z * z)

    max_value = max(arr1)
    if arr1.count(max_value) == 1:
        for i in range(len(arr1)):
            if arr1[i] == max_value:
                print(i+1, max_value)
                break;
    else:
        pow_max_value = max(arr2)
        idx = 0
        for i in range(len(arr2)):
            if arr2[i] == pow_max_value:
                idx = i
                break;
         
        # 회장 선출 불가능한 경우
        if arr2.count(pow_max_value) > 1:
            print(0, arr1[idx])
            
        #가능한 경우
        else:
            print(idx+1, arr1[idx])

피드백

제곱해서 값을 판별하도록 생각해내는게 센스인 거 같다.. 난 다른 사람 코드를 참고해서 이를 알았는데, 실제로도 이런 센스를 발휘하도록 기억해놔야겠다.

그 후로도 계속 73%에서 틀렸습니다 떠서 제곱근 max가 1개 일때 2개일때 3개일때 나눠서 했는데 어떻든 제곱이 같으면 갯수가 다 같다는 것이기 때문에 불가능한 경우가 된다. 이를 좀 늦게 깨달았다. 그래도 통과!

profile
와니와니와니와니 당근당근

0개의 댓글