문제 출처: 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개일때 나눠서 했는데 어떻든 제곱이 같으면 갯수가 다 같다는 것이기 때문에 불가능한 경우가 된다. 이를 좀 늦게 깨달았다. 그래도 통과!