[파이썬] 이코테 - 그리디 알고리즘, 숫자 카드 게임(실전문제)

김지현·2021년 7월 16일
0

그리디 알고리즘 (Greedy Algorithm)

  • 그리디란 '탐욕'이라는 의미
    즉, 현재 상황에서 지금 당장 좋은 것만 고르는 방법

[문제 설명]
N(행)xM(열)개의 카드가 있다. 각 행에서 가장 작은 숫자를 뽑고, 이 작은 숫자들 중 가장 큰 값을 출력한다.

[입력 조건]

  • 첫째 줄에 숫자 카드들이 놓인 행의 개수 N과 열의 개수 M이 공백을 기준으로 하여 각각 자연수로 주어진다.(1<=N, M<=100)
  • 둘째 줄부터 N개의 줄에 걸쳐 각 카드에 적힌 숫자가 주어진다. 각 숫자는 1 이상 10,000이하의 자연수이다.

ex)
3 3
3 1 2
4 1 4
2 2 2 -> 2출력


[작성 코드]

  • min 함수 사용
n,m = map(int, input().split())
result = 0

for i in range(n):
    data =list(map(int, input().split()))
    min_value = min(data)
    
    result = max(result,min_value)

print(result)

📌

  • 최솟값, 최대값의 단서가 나오면 min, max함수를 사용하면 간단한 코드를 짤 수 있다.

[작성 코드]

  • 2중 for문 사용
n,m = map(int, input().split())
result = 0

for i in range(n):
    data =list(map(int, input().split()))
    
    #현재 줄에서 가장 작은 수
    min_value = 10001
    for a in data:
        min_value = min(min_value,a)
        
    #가장 작은 수 중에서 가장 큰 수
    result=max(result,min_value)
    
print(result)

📌

  • 2중 for문하면 구구단 형태만 떠올리는 것 같다. 이를테면 for i in range, for j in range 꼴. 다양하게 사용될 수 있음을 알고 접근하자.
  • min_value = 10001이라고 설정한 것은 이후에 최솟값과 비교할 대상을 임의의 큰 수로 지정한 것이다.

@이것이 코딩 테스트다 with 파이썬

profile
Programmer & Media

0개의 댓글