코딩테스트 문제풀이/beakjoon

[백준] 18310 안테나

merona99 2022. 6. 11. 00:13
반응형

백준 18310번 안테나

수학 / 그리디 / 정렬

 

 

[문제]

 

이 문제는 중앙값을 구하는 것

중간값x .. 이걸로 계속 false가 나왔다.

 

여러 개의 값이 나오면 작은 번호의 집을 출력하는 것 체크해두고 가기

 

 

 

[풀이과정]

 

<중앙값 구하기>

 

1. 집들의 수가 짝수일 경우:

    1-1) idx = 집들의 수를 2로 나누기

    1-2) idx-1의 값을 출력    <-우리는 작은 번호의 집이 필요하기 때문에 2개의 수가 가운데 일텐데 그중에 가운데 것을 뽑아야 함

 

2. 집들의 수가 홀수일 경우:

    2-1) idx = 집들의 수를 2로 나누기

    2-2) 출력

 

 

 

 

[소스코드]

 

# 안테나 2022-06-10

n = int(input())
house = list(map(int, input().split()))
house.sort()

if len(house) % 2 == 0:
    # 짝수
    idx = len(house) //2
    result = house[idx-1]
else:
    # 홀수
    idx = len(house) // 2
    result = house[idx]
print(result)

 

 

 


 

[통과]

 

 

 

// 처음에 했던 방법은 값들을 2로 나눴을 때의 숫자와 가까운 집을 출력하는 방법이었다.

이는 중간값을 이용한 방법인데 우선 틀렸다.

 

이 반례를 보면 왜 틀렸는지 알 수 있음!

 

반응형