깡뇽

[코테] 그리디 문제풀기 - 숫자 카드 게임 본문

Algorithm/Coding Test

[코테] 그리디 문제풀기 - 숫자 카드 게임

깡뇽 2022. 2. 1. 17:45
반응형

Day4

그리디 문제풀기 - 숫자 카드 게임 (2019 국가 교육기관 코딩 테스트 기출 / 난이도 하)

 

<문제>

주어진 룰을 지켜 가장 높은 숫자가 쓰인 카드 한 장을 뽑아야 한다. 

1. 숫자 카드들은 N(행) X M(열) 형태로 배치된다.

2. 먼저 뽑을 카드가 있는 행을 선택한다.

3. 그다음 선택된 행에 있는 카드들 중 가장 낮은 숫자 카드를 뽑는다.

4. 즉, 처음에 카드를 고를 행을 선택할 때에 나중에 해당 행에서 가장 낮은 숫자의 카드를 뽑을 것을 미리 고려해서 최종적으로는 가장 높은 숫자의 카드를 뽑도록 해야 한다.

 

<조건>

첫째 줄 : N, M 자연수 입력. 공백 구분

둘째 줄 : N개의 줄 입력. 카드에 적힌 숫자들

 

숫자 카드 게임 풀이

n, m = map(int, input().split())
numbers = [list(map(int, input().split())) for _ in range(n)]

#한 행을 해당 행에서 가장 작은 수로 대체
for i in range(0,n):
  numbers[i].sort()
  numbers[i] = numbers[i][0]

numbers.sort()
print(numbers[-1]) #정렬 후 가장 큰 수 찾기

N행 M열의 카드들은 numbers에 담아지고, #1의 경우 numbers는 [[3,1,2],[4,1,4],[2,2,2]]가 된다. list이므로 sort()와 인덱스를 사용할 수 있다. for 반복문에서 n개의 행 안에 하나의 행을 골라 해당 행에서 가장 작은 수로 그 행을 대체한다. i가 0일 때, for문을 돌고나면 numbers는 [1,[4,1,4],[2,2,2]]가 된다. [3,1,2] 중에서 가장 작은 수는 1이기 때문이다. 이렇게 for문을 다 돌고나면 numbers는 [1,1,2]가 된다. 다시 정렬을 시키고 가장 큰 수를 찾기 위해 numbers[-1] 즉, 맨 뒤 인덱스에 해당하는 값으로 2가 출력된다. 

+ 카드를 한 줄씩 입력을 때 min() 함수로 가장 작은 수를 찾아서 넣고 최종적으로는 max() 함수로 가장 큰 수를 찾는 방법도 있다. 또한, 2중 반복문을 사용하여 코딩할 수도 있다.

 

#1

 

#2

 

반응형