백준 2890번: 카약 (C++)

2023. 1. 19. 14:20알고리즘/브루트포스

https://www.acmicpc.net/problem/2890

 

2890번: 카약

첫째 줄에 R과 C가 주어진다. 다음 R개 줄에는 '.', 'S', 'F', '1'~'9'로 이루어진 위성 지도가 주어진다. 한 줄에는 최대 한 개의 카약만 있고, 위성 사진에 있는 카약은 항상 9개이다. (10 ≤ R, C ≤ 50)

www.acmicpc.net

 

 

풀이

완전 탐색으로 진행해도 R * C, 즉, 최대 50 * 50 정도 밖에 들지 않기 때문에 완전 탐색으로 진행했다.

String 백터를 이용하여 문자열을 입력 받았고 결승선 F와 가장 가까운 부분(C - 2)부터 차례대로 탐색했다.

 

rank 변수를 이용해 카운트를 받아주었고 어떤 레일도 순위에 들지 않을 때는 카운트가 증가되지 않도록 구성했다.

 

 

전체 코드

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int R, C;
	int rank[10] = { 0, };
	int cnt = 1;
	bool is_rank = false;
	vector<string> v;
	
	cin >> R >> C;

	for (int i = 0; i < R; i++) {
		string s;
		cin >> s;
		v.push_back(s);
	}

	for (int i = C - 2; i >= 1; i--) {
		for (int j = 0; j < R; j++) {
			int kayak = v[j][i] - '0';
			if (!rank[kayak] && kayak > 0 && kayak <= 9) {
				rank[kayak] = cnt;
				is_rank = true;
			}
		}
		if(is_rank) cnt++;
		is_rank = false;
	}

	for (int i = 1; i <= 9; i++) cout << rank[i] << '\n';

}