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

 

이번에 볼 문제는 백준 14171번 문제인 Cities and States이다.
문제는 아래 링크를 확인하자.

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

 

14171번: Cities and States

To keep his cows intellectually stimulated, Farmer John has placed a large map of the USA on the wall of his barn. Since the cows spend many hours in the barn staring at this map, they start to notice several curious patterns. For example, the cities of Fl

www.acmicpc.net

각 도시의 이름과 주의 이름을 차례대로 읽어나가면서, 해당 도시와 special pair를 맺을 수 있는 앞서 입력된 도시의 수를 더해나가는 것을 반복하는 것으로 문제를 해결할 수 있다.

 

이 때, 각 도시의 전체 이름은 중요하지 않고 앞 두글자만이 중요하다는 점을 관찰하자. 또한, 영어 대문자로만 이루어진 두 글자의 문자열은 각 자리에 26가지의 문자만이 올 수 있으므로 26*26=676개의 정수로 각 문자열을 대응시킬 수 있음을 관찰하자. 이 관찰을 이용하면 문제의 과정을 별도의 map 없이 배열만으로 빠르게 문제를 해결할 수 있다.

 

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

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

int N;
int mp[676][676];
ll ans;

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

	cin >> N;
	while (N--) {
		string ct, cd; cin >> ct >> cd;
		int ctidx = 26 * (ct[0] - 'A') + (ct[1] - 'A'), cdidx = 26 * (cd[0] - 'A') + (cd[1] - 'A');
		if (ctidx != cdidx) ans += mp[ctidx][cdidx];
		mp[cdidx][ctidx]++;
	}

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 27915 // C++] 금광  (1) 2023.10.21
[BOJ 27914 // C++] 인터뷰  (0) 2023.10.20
[BOJ 14170 // C++] Counting Haybales  (0) 2023.10.18
[BOJ 4138 // C++] Paper Route  (1) 2023.10.17
[BOJ 4139 // C++] Octagons  (0) 2023.10.16

+ Recent posts