ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • O - [ 그리디 ] 숫자 카드 게임 - R
    알고리즘/이코테 - 실전 2021. 10. 5. 08:30

    난이도 : 하  풀이시간 : 30/11  시간제한 : 1초 

    [ 그리디 ] 숫자 카드 게임

     

    숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다.

     

    단, 게임의 룰을 지키며 카드를 뽑아야 하고 룰은 다음과 같다.

     

    1. 숫자가 쓰인 카드들이 N x M 형태로 놓여 있다. 이때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다.

    2. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다.

    3. 그 다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다.

    4. 따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여

        최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다.

     

    :: 입력 조건

     

    1. 첫째 줄에 숫자 카드들이 높인 행의 개수 N과 열의 개수 M이 공백을 기준으로 하여 각각 자연수로 주어진다.

     

         (1 <= N, M <= 100)

     

    2. 둘째 줄부터 N개의 줄에 걸쳐 각 카드에 적힌 숫자가 주어진다. 각 숫자는 1 이상 10,000 이하의 자연수이다.

     

    :: 출력 조건

     

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

     

     


      아이디어  

    1. n, m 입력받기

    2. 2중 for문 돌면서 배열에 입력받기

    3. 2중 for문을 도는 와중에 해당 행에서 가장 작은 수를 따로 벡터에 저장

    4. 벡터를 정렬해서 가장 뒤에 있는 수를 출력

     

      내   코드  

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <queue>
    
    #define max 1e9;
    
    using namespace std;
    
    int main(void) {
    
    	int n=0, m=0;
    	int nums[101][101] = { 0, };
    	
    	vector<int> v;
    
    	cin >> n >> m;
    
    	for (int i = 0; i < n; i++) {
    		int min = max;
    		for (int j = 0; j < m; j++) {
    			cin >> nums[i][j];
    			if (min > nums[i][j]) {
    				min = nums[i][j];
    			}
    		}
    		v.push_back(min);
    	}
    
    	sort(v.begin(), v.end());
    
    	cout << v[n - 1];
    }

     

      정답  코드  

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int n, m;
    int result;
    
    int main() {
        // N, M을 공백을 기준으로 구분하여 입력 받기
        cin >> n >> m;
    
        // 한 줄씩 입력 받아 확인하기
        for (int i = 0; i < n; i++) {
            // 현재 줄에서 '가장 작은 수' 찾기
            int min_value = 10001;
            for (int j = 0; j < m; j++) {
                int x;
                cin >> x;
                min_value = min(min_value, x);
            }
            // '가장 작은 수'들 중에서 가장 큰 수 찾기
            result = max(result, min_value);
        }
    
        cout << result << '\n'; // 최종 답안 출력
    }

     

      리뷰  

    min, max 함수를 쓰면 더 간결하게 짤 수 있었음

준생e