CS/Coding Test

[ 이것이 취업을 위한 코딩 테스트다 with 파이썬 ] Chapter 03 그리디 - 실전문제: 숫자 카드 게임

all-young 2022. 2. 9. 01:38
728x90

숫자 카드 게임

 

1 _ 문제

숫자 카드 게임은 여러 개의 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단, 게임의 룰을 기키며 카드를 뽑아야 하고 룰은 다음과 같다.

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

예를 들어 3 x 3 형태로 카드들이 다음과 같이 놓여 있다고 가정하자.

여기서 카드를 골라낼 행을 고를 때 첫 번째 혹은 두 번째 행을 선택하는 경우, 최종적으로 뽑는 카드는 1이다. 하지만 세 번째 행을 선택하는 경우 최종적으로 뽑는 카드는 2이다. 따라서 이 예제에서는 세 번째 행을 선택하여 숫자 2가 쓰여진 카드를 뽑는 것이 정답이다.

카드들이 N x M 형태로 놓여 있을 때, 게임의 룰에 맞게 카드를 뽑는 프로그램을 만드시오.

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

 


 

2 _ 문제 해결(고민) 과정

각 행 정렬 해서, 그 행마다 가장 작은 숫자 뽑고, 그 숫자끼리 비교해서 가장 큰거 뽑으면 되는거 아닌가,,?
간단해 보이는데

 


 

3 _ 문제 알고리즘

1. 빈 배열을 생성한다. 이때, 빈 배열의 목적은 각 행에서 뽑은 숫자를 정렬하여 답을 찾기 위함이다.

2. 각 행의 배열을 오름차순으로 정렬한다.

3. 모든 행을 거칠 때까지, 다음의 과정을 반복한다.
  3 - 1. 각 행의 배열에서 0번째 인덱스를 택한다.
  3 - 2. 택한 0번째 인덱스의 값을 1번에서 생성한 빈 배열에 할당한다.

4. 1번에서 생성한 배열을 내림차순으로 정렬한다.

5. 1번에서 생성한 배열의 0번째 인덱스에 해당하는 값을 출력한다.

 


 

4 _ MY CODE

  • 코드
n, m = map(int, input().split())

lst = []
answer = 0

for i in range(n):
  data = list(map(int, input().split()))
  data.sort()
  lst.append(data[0])
  
lst.sort(reverse = True)
answer = lst[0]

print(answer)
  • 실행결과 1

  • 실행결과 2

 


 

5 _ 교재 답안 코드

  • 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)
  • 2중 반복문 구조를 이용하는 답안 예시
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)

 


 

6 _ 마치며

왜 min과 max 함수 쓸 생각을 못했을까,,

다음에는 더 효율적인 코드를 만들자👊👊

 


 

위 내용은 저자 나동빈의 < 이것이 취업을 위한 코딩 테스트다 with 파이썬 > 을 읽고, 공부한 내용입니다.

https://book.naver.com/bookdb/book_detail.nhn?bid=16439154

 

이것이 취업을 위한 코딩 테스트다 with 파이썬

IT 취준생이라면 누구나 입사하고 싶은 카카오ㆍ삼성전자ㆍ네이버ㆍ라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다!IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년부

book.naver.com