일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- codecademy
- Kotlin
- inflearn
- SWEA
- CSS
- android
- html
- 정렬
- DP
- 알고리즘
- 순환
- Color
- CleanCode
- 구현
- 검색트리
- BFS
- Spring
- 자바
- 클린코드
- Web
- algorithm
- SQL
- 프로그래머스
- DFS
- 다이나믹 프로그래밍
- 해슁
- front-end
- java
- 코딩테스트
- javascript
- Today
- Total
깡뇽
[코테] 그리디 문제풀기 - 숫자 카드 게임 본문
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
'Algorithm > Coding Test' 카테고리의 다른 글
[코테] 구현 공부하기 (9) | 2022.02.02 |
---|---|
[코테] 그리디 문제풀기 - 1이 될 때까지 (0) | 2022.02.01 |
[코테] 그리디 문제풀기 - 큰 수의 법칙 (0) | 2021.08.20 |
[코테] 그리디 공부하기 (0) | 2021.08.19 |
알고리즘 공부 (다시) 시작 (0) | 2021.08.18 |