※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 26267번 문제인 은?행 털!자 1이다.
문제는 아래 링크를 확인하자.

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

 

26267번: 은?행 털!자 1

프로 은행강도 시우가 은행을 털려고 한다. 시우가 달려가는 일직선 경로 위엔 $N$개의 은행이 있다. $i$번째 은행은 직선상에서 서로 다른 좌표 $X_i$에 위치하며, 시간이 정확히 $T_i$ 일 때만 문이

www.acmicpc.net

 

좌표 X에 있는 은행에 시간 T에 방문하려면 시우는 좌표 XT에서 움직임을 시작해야 함을 관찰하자. 이 관찰을 이용하면 시우가 좌표 x에서 움직임을 시작한다면 XT=x가 성립하는 모든 은행들을 방문할 수 있음을 알 수 있다.

 

모든 가능한 시작 좌표에 대하여 탐색하기에는 필요한 탐색 범위가 넓으므로, "시우가 은행을 방문할 수 있는 각 시작 좌표"에 대하여 방문할 수 있는 모든 은행을 map 등의 자료구조를 활용해 모아서 문제를 해결하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef long long ll;

int N;
map<ll, ll> mp;
ll ans;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;
	while (N--) {
		ll X, T, C; cin >> X >> T >> C;
		X -= T;
		if (mp.count(X)) mp[X] += C;
		else mp.insert(make_pair(X, C));
	}

	for (auto &p : mp) {
		ans = max(ans, p.second);
	}

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 26596 // C++] 황금 칵테일  (0) 2024.03.08
[BOJ 28446 // C++] 볼링공 찾아주기  (0) 2024.03.07
[BOJ 20157 // C++] 화살을 쏘자!  (1) 2024.03.05
[BOJ 14670 // C++] 병약한 영정  (0) 2024.03.04
[BOJ 16506 // C++] CPU  (0) 2024.03.03

+ Recent posts