그리디 (Greedy) (3) - 실전문제 3.3) 숫자 카드 게임

2023. 7. 22. 16:13· Algorithm
문제)
숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단, 게임의 룰은 아래와 같다.
  1. 숫자가 쓰인 카드들이 N x M 형태로 놓여 있다. 이 때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다.
  2. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다.
  3. 그 다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다.
  4. 따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로            가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다.

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

출력 조건)
1. 첫째 줄에 게임의 룰에 맞게 선택한 카드에 적힌 숫자를 출력한다.

입력 예시)
3 3
3 1 2
4 1 4
2 2 2

출력 예시)
2

해당 문제에서 핵심은 리스트로 입력받은 각 행들의 숫자들 중 가장 작은 수들끼리 비교해서 그 중 가장 큰 수를 선택해야 한다는 것이다. 따라서 공백을 기준으로 리스트의 행의 숫자들을 입력받음과 동시에 리스트의 행들을 오름차순으로 정렬해준다. 이러한 과정을 N번 거쳐서 모든 숫자들을 입력받는다. 이러한 과정을 거치면 입력받은 리스트는 각 행별로 오름차순 정렬이 되어있다. 

마지막으로 각 행들의 0번째 인덱스의 수를 비교해서 가장 큰 수를 찾고 출력하면 모든 조건에 부합한 수를 출력할 수 있다.

예제3.2와 마찬가지로 리스트[행].sort() 를 통해서 오름차순 정렬을 해주었다.

소스코드

https://github.com/Engineering-Student-An/algorithm_python/blob/master/greedy/%EC%8B%A4%EC%A0%84%EB%AC%B8%EC%A0%9C%203-3%20%EC%88%AB%EC%9E%90%20%EC%B9%B4%EB%93%9C%20%EA%B2%8C%EC%9E%84.py


더욱 간단한 방법은 아래와 같다.

  • N번 반복하는 반복문을 통해 각 행별로 입력받는다.
  • 이 때, 받은 입력을 리스트화 하지 않고 행 별로 입력받음과 동시에 최솟값을 찾는다.
  • 반복문을 돌면서 이전의 최솟값과 현재 최솟값을 비교하여 더 큰 값으로 초기화 한다.
  • 최종적으로 초기화 한 값을 출력한다.

이러한 방법을 통해서 위의 소스코드보다 더욱 간단한 코드를 구현할 수 있다. 반복문을 1번만 실행하게 할 수 있는 것이다. 

소스코드

https://github.com/Engineering-Student-An/algorithm_python/blob/master/greedy/%EC%8B%A4%EC%A0%84%EB%AC%B8%EC%A0%9C%203-3%20%EC%88%AB%EC%9E%90%20%EC%B9%B4%EB%93%9C%20%EA%B2%8C%EC%9E%84_simple.py

저작자표시 (새창열림)

'Algorithm' 카테고리의 다른 글

구현 (Implementation) (1) - 코딩테스트에서 구현이란? / 예제 4.1) 상하좌우, 예제 4.2) 시각  (0) 2023.07.28
그리디 (Greedy) (4) - 실전문제 3.4) 1이 될 때까지  (0) 2023.07.22
그리디 (Greedy) (2) - 실전문제 3.2) 큰 수의 법칙  (0) 2023.07.22
그리디 (Greedy) (1) - 그리디 알고리즘이란? / 예제 3.1) 거스름돈  (0) 2023.07.19
복잡도 (Complexity) (4) - 시간과 메모리 측정  (0) 2023.07.19
'Algorithm' 카테고리의 다른 글
  • 구현 (Implementation) (1) - 코딩테스트에서 구현이란? / 예제 4.1) 상하좌우, 예제 4.2) 시각
  • 그리디 (Greedy) (4) - 실전문제 3.4) 1이 될 때까지
  • 그리디 (Greedy) (2) - 실전문제 3.2) 큰 수의 법칙
  • 그리디 (Greedy) (1) - 그리디 알고리즘이란? / 예제 3.1) 거스름돈
공대생안씨
공대생안씨
전자공학과 학부생의 코딩 일기
티스토리
|
로그인
공대생안씨
공대생의 코딩 일기
공대생안씨
글쓰기
|
관리
전체
오늘
어제
  • All Categories (153)
    • Spring Boot (46)
      • JPA (7)
      • Lombok (2)
    • Java (21)
    • DevOps (3)
      • CI,CD (8)
      • Monitoring (2)
    • Database (7)
      • MySQL (5)
      • MongoDB (1)
      • H2 (1)
    • Trouble Shooting (5)
    • FE (4)
    • IntelliJ (3)
    • Git (3)
    • Algorithm (41)

블로그 메뉴

  • 홈
  • 태그
  • Github

공지사항

인기 글

hELLO · Designed By 정상우.v4.2.2
공대생안씨
그리디 (Greedy) (3) - 실전문제 3.3) 숫자 카드 게임
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.