티스토리 뷰

728x90

Find the Runner-Up Score!

Given the participants' score sheet for your University Sports Day, you are required to find the runner-up score. You are given n scores. Store them in a list and find the score of the runner-up.

Input Format

The first line contains . The second line contains an array A[] of n integers each separated by a space.

Constraints

  • 2 <= n <= 10
  • -100 <= A[i] <= 100

Output Format

Print the runner-up score.

Sample Input 0

5
2 3 6 6 5

Sample Output 0

5

Explanation 0

Given list is [2,3,6,6,5]. The maximum score is 6, second maximum is 5. Hence, we print 5 as the runner-up score.

 

문제해석

1. input 값으로 정수 n값과 배열 A[] 2개가 입력된다. n은 배열의 크기인 것 같다. 

2. runner-up score는 준우승 점수라는 의미로 배열에서 2번째로 큰 숫자를 찾으면 된다.

3. 샘플문제는 [2, 3, 6, 6, 5] 배열에서 2번째로 큰 값을 찾는 것이므로 정답은 5가 된다.

 

문제풀이

어떻게든 데이터를 배열로 변경하여 풀어야 한다고 생각을 하였다.

그래서 입력받은 arr을 list(arr) 구문을 통해 [2, 3, 6, 6, 5] 포맷의 배열로 변경을 하였다.

여기서 max(arrList)를 하면 최대값인 6은 가져올 수 있겠지만 문제에서 원하는 2번째 값은 아니다. 

또, arrList.sort(reverse = True) 구문을 통해 역순으로 정렬한 후 arrList[1]를 할 경우에도 [6, 6, 5, 3, 2] 배열에서 2번째 값이므로 또 6을 가져오게 된다.

그래서 for문을 활용하여 값을 비교 해야하나 고민하다가 중복을 제거하면 되겠다고 생각을 하였다.

찾아보니 파이썬에서는 배열의 중복을 제거하려면 집합으로 변경하면 된다고 한다.

그래서 set(list(arr))이라는 구문이 생기게 되었고, 이렇게 하면 {2, 3, 6, 5}로 값이 변한다.

이 값을 list() 함수를 통해 [2, 3, 6, 5] 포맷의 배열로 다시 변경해 준 후 역순으로 정렬하고 2번째 값을 가져오면 결과가 나온다. 

이렇게 하니까 문제에서 제시한 n 값은 사용하지 않게 되었다...

if __name__ == '__main__':
    n = int(input())
    arr = map(int, input().split())
        
    arrList = list(set(list(arr)))    
    arrList.sort(reverse = True)    
    print(arrList[1])

 Discussions를 보니 나처럼 풀이한 사람도 많고, 전체적으로 n값은 사용하지 않는 것 같다. 

아래처럼 list() 함수로 배열로 만들고 max값을 제거한 후 다시 max값을 출력하도록 풀이한 사람도 있다. 

i = int(input())
lis = list(map(int,raw_input().strip().split()))[:i]
z = max(lis)
while max(lis) == z:
    lis.remove(max(lis))

print max(lis)

 

 

 

728x90
LIST
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함