본문 바로가기
SWEA 문제 풀이

SWEA[D1] (Python) 2063번 중간값 찾기 풀이

by ODEU 2022. 7. 5.
728x90

SWEA[D1] (Python) 2063번 중간값 찾기 풀이입니다.

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

 

SW Expert Academy

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

swexpertacademy.com


숫자를 입력받고 그만큼 숫자 값을 입력받아 그 숫자의 중간값을 찾는 문제였다.

 

처음에는 입력을 받은 숫자만큼의 크기의 리스트를 생성하고 리스트의 값을 입력받는 코드를 생각했는데 이렇게 되면 스페이스바가 아니라 엔터로 값을 입력받는 것이라서 다시 생각해야 했다...

print(a[(n/2 + 0.5)]) 는 인덱스에 정수값만 들어가야 해서 사용할 수 없었다.

만약 이와 같은 계산을 이용하여 숫자의 중간값이 들어갈 인덱스를 구하고 싶어서 몫 연산자를 이용했다. 만약 숫자를 순서대로 정렬한다면 이후에 중간값은 홀수를 2로 나눈 몫과 같기 때문이다.

n = int(input())
a = [0] * n
i = 0
while n > i :
  a[i] = int(input())
  i = i + 1
a.sort()
index = n / 2 + 0.5
print(index)
index = int(index)
print(a[index])

처음 생각한 코드의 원형

n = int(input())
a = [0] * n
i = 0
while n > i :
  a[i] = int(input())
  i = i + 1
a.sort()
print(a[n // 2])

이후 수정한 코드는 몫을 이용했다.

 

코드를 작성하는 가운데 C와 python이 섞여 i++를 사용하는 등의 실수가 있었다. 코드별 문법을 정확하게 숙지해야겠다.

 

사실 sort() 함수를 사용하지 않고 스스로 sort()를 구현해야 하는지 고민이 있었는데, python은 기본 함수로 sort를 가지고 있었기 때문에 바로 이용하여 코드를 구성했다.

 

최종적으로 사용한 코드

처음에  a = list(input().split())을 사용하여 입력값을 받았더니 문자열로 받아져서 정렬을 하면 0 1 10 111 2 222 이런 식으로 정렬이 되었기 때문에 예측한 결과가 나오지 않았다.

map() 함수를 사용하여 스페이스바로 구분된 입력값을 정수 자료형으로 받은 후 sort() 함수를 사용하여 작은 순서대로 정렬한 후 가운데에 위치하는 인덱스의 번호를 이용하여 중간값을 출력했다.

n = int(input())
a = list(map(int,input().split()))
a.sort()
print(a[(n//2)])

 

 

728x90