출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

 

간단한 문제다. 하지만 실수를 하는 바람에 제출을 하고 몇개의 테스트 케이스에서 틀리고 점수가 깎였다:

if __name__ == '__main__':
    n = int(input())
    arr = list(map(int, input().split()))
    set_arr = set(arr)
    list_set_arr = list(set_arr)
    sorted_list = sorted(list_set_arr)
    if len(sorted_list) == 1:
        print(sorted_list[0])
    else:
        print(sorted_list[-2])

arr을 set로 만들어서 중복되는 숫자들은 없애주고, 이 set를 다시 리스트로 만들어서 sorted() 함수를 통해 오름차순으로 정렬을 해준다 (이유는 밑에서 설명하겠다.) 이후 이 리스트의 길이가 1이라면, 리스트에 들어가있는 하나의 숫자만 출력을 하고, 아니라면 뒤에서 2번째 숫자를 출력하도록 했다.

 

set에서 리스트로 바꾼 후, 다시 sorted() 함수로 정리하는 이유는 다음과 같다:

>>> arr = list(map(int, input().split()))
-100 -99 -88 3 2 100
>>> arr
[-100, -99, -88, 3, 2, 100]
>>> set_arr = set(arr)
>>> set_arr
{2, 3, 100, -88, -100, -99}

위의 코드에서 보듯이, 순서가 매우 이상하게 나온다. 따라서 이를 다시 리스트로 바꾸고, 또 다시 오름차순으로 정렬을 해주어야 한다.