Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Image Segmentation
- 나는리뷰어다
- Python
- Recsys-KR
- pytorch
- DFS
- TEAM EDA
- DilatedNet
- TEAM-EDA
- 추천시스템
- hackerrank
- Segmentation
- Object Detection
- 한빛미디어
- Semantic Segmentation
- 엘리스
- 입문
- 큐
- eda
- 알고리즘
- 코딩테스트
- MySQL
- 협업필터링
- 나는 리뷰어다
- 튜토리얼
- 스택
- Machine Learning Advanced
- 프로그래머스
- 파이썬
- 3줄 논문
Archives
- Today
- Total
TEAM EDA
[엘리스] 두 번째 최대값 본문
두 번째 최대값
n x n의 행렬이 주어질 때, 1) 모든 원소의 합, 2) 원소의 최댓값, 3) 원소의 두 번째 최댓값을 구하는 getMax2(n, myMatrix)을 작성하세요. 여기서 두 번째 최댓값은, 최댓값보다 작은 숫자를 의미합니다.
[입력값]
- 〔1〕 n
- 〔2~〕 n x n 행렬의 원소
모든 원소는 양수라고 가정합니다.
[결과값] 〔1〕 (a, b, c)
- a: 모든 원소의 합
- b: 원소의 최댓값
- c: 원소의 두 번째 최댓값
두 번째 최댓값은 항상 존재한다고 가정합니다.
[입력 예시 1]
3
1 2 3
2 3 4
4 4 2
[출력 예시 1]
(25, 4, 3)
[입력 예시 2]
5
7 2 3 4 5
2 3 4 1 2
2 3 2 5 2
3 3 4 2 1
3 5 2 1 1
[출력 예시 2]
(72, 7, 5)
풀이
- 2중 리스트를 단일 리스트로 변경하여 sum(), max() 함수 적용
- 2중 리스트를 단일 리스트로 변경하는 방법
- itertools의 chain method 사용
- list(chain(*myMatrix))
- list(chain.from_iterable(myMatrix))
- reduce 사용 방법
- list(reduce(lambda x, y: x+y, myMatrix))
- list comprehension 이용
- [element for myArray in myMatrix for element in myArray]
- itertools의 chain method 사용
from itertools import chain
def getMax2(n, myMatrix):
'''
크기 n x n 의 행렬 myMatrix내의 원소의 합, 최댓값, 두 번째 최댓값을 반환하는 함수.
만약 myMatrix = [[1, 2, 3], [2, 3, 4], [3, 3, 4]]라면 (25, 4, 3) 을 반환한다.
'''
A = sorted(list(chain.from_iterable(myMatrix)))
mySum = sum(A)
myMax = max(A)
myMax2 = list(set(A))[-2]
return (mySum, myMax, myMax2)
def main():
'''
이 부분은 수정하지 마세요.
'''
n = int(input())
myMatrix = []
for i in range(n):
myMatrix.append([int(v) for v in input().split()])
print(getMax2(n, myMatrix))
if __name__ == "__main__":
main()
모범 답안
def getMax2(n, myMatrix):
'''
크기 n x n 의 행렬 myMatrix내의 원소의 합, 최댓값, 두 번째 최댓값을 반환하는 함수.
만약 myMatrix = [[1, 2, 3], [2, 3, 4], [3, 3, 4]]라면 (25, 4, 3) 을 반환한다.
'''
mySum = 0
myMax = 0
myMax2 = 0
for matrix in myMatrix :
for num in matrix :
mySum += num
if myMax2 < num :
if myMax < num :
myMax2,myMax = myMax,num
elif myMax > num :
myMax2 = num
return (mySum, myMax, myMax2)
def main():
'''
이 부분은 수정하지 마세요.
'''
n = int(input())
myMatrix = []
for i in range(n):
myMatrix.append([int(v) for v in input().split()])
print(getMax2(n, myMatrix))
if __name__ == "__main__":
main()
출처 : 엘리스 아카데미, https://academy.elice.io/learn
'EDA Study > 알고리즘' 카테고리의 다른 글
[엘리스] 합계 0인 정수 쌍 구하기 (0) | 2020.03.28 |
---|---|
[엘리스] 소수 판정 (0) | 2020.03.28 |
[엘리스] 이진트리 만들기 (0) | 2020.03.28 |
[엘리스] 엘리스의 동물어 수업 (0) | 2020.03.27 |
[엘리스] 스도쿠 마스터 (0) | 2020.03.27 |