[c++] BOJ 1501 :: ์˜์–ด ์ฝ๊ธฐ

๋ฌธ์ œ

[์˜์–ด ์ฝ๊ธฐ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ]

 

1501๋ฒˆ: ์˜์–ด ์ฝ๊ธฐ

์ฒซ์งธ ์ค„์— ์‚ฌ์ „์— ์žˆ๋Š” ๋‹จ์–ด๋“ค์˜ ๊ฐœ์ˆ˜ N(0 ≤ N ≤ 10,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ค„์— ํ•˜๋‚˜์”ฉ, ์˜์–ด ์‚ฌ์ „์— ์žˆ๋Š” ๋‹จ์–ด๋“ค์ด ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ๋‹จ์–ด์˜ ๊ธธ์ด๋Š” 100์ž๋ฅผ ๋„˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค์Œ ์ค„์—

www.acmicpc.net

ํ˜น์‹œ ์ธํ„ฐ๋„ท์„ ํ•˜๋‹ค๊ฐ€, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹์˜ ๋ฌธ์žฅ์„ ๋ณธ ์ ์ด ์žˆ๋Š”๊ฐ€?

It is itnersetnig taht pepole can raed smoe grabeld wrods.

์›๋ž˜์˜ ๋ฌธ์žฅ์€ 'It is interesting that people can read some garbled words'์ด๋‹ค. ๊ฐ๊ฐ์˜ ๋‹จ์–ด๋“ค์€ ์ œ์ผ ์ฒซ ๋ฌธ์ž์™€ ์ œ์ผ ๋ ๋ฌธ์ž๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ˆœ์„œ๊ฐ€ ๋’ค์„ž์—ฌ ์žˆ๋‹ค. ํ•œ ๋Œ€ํ•™์—์„œ ์‹œํ–‰ํ•œ ์—ฐ๊ตฌ ์กฐ์‚ฌ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅด๋ฉด, (์˜์–ด ๋‹จ์–ด๋ฅผ ์•„๋Š” ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ) ์ฒซ ๋ฌธ์ž์™€ ์ œ์ผ ๋ ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•˜๊ณ , ๊ทธ ์‚ฌ์ด์˜ ๋ฌธ์ž๋“ค์€ ์ˆœ์„œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋’ค๋ฐ”๋€Œ์–ด ์žˆ๋”๋ผ๋„ ์ฝ๋Š” ๋ฐ ์ง€์žฅ์ด ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ณด๋‹ˆ, ํ•œ ๋‹จ์–ด๊ฐ€ ์—ฌ๋Ÿฌ ๋‹จ์–ด๋กœ ํ•ด์„๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด abcde์™€ ๊ฐ™์€ ๋‹จ์–ด๋Š”, abcde, abdce, acbde, acdbe, adbce, adcbe ๊ฐ™์€ ๋‹จ์–ด๋“ค๋กœ ํ•ด์„๋  ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฌผ๋ก  ๊ฐ๊ฐ์˜ ๋‹จ์–ด๋“ค์ด ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š” ๋‹จ์–ด(์‚ฌ์ „์— ์กด์žฌํ•˜๋Š” ๋‹จ์–ด)์ผ ๊ฒฝ์šฐ์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค.

์˜์–ด ๋ฌธ์žฅ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ๋ฌธ์žฅ์„ ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๊ฐ๊ฐ์˜ ๋‹จ์–ด๋Š”, ์ฒซ ๊ธ€์ž์™€ ๋ ๊ธ€์ž๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๋‹ค๋ฅธ ๋‹จ์–ด(์‚ฌ์ „์— ์กด์žฌํ•˜๋Š”)๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜์–ด ๋ฌธ์žฅ์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹จ์–ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ๋‹จ์–ด๋“ค์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ๋‹ค.

 

ํ’€์ด

๋‹จ์–ด์˜ ์ค‘๊ฐ„ ๋ถ€๋ถ„์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ๋„ ๊ฐ™์€ ๋‹จ์–ด๋ผ๊ณ  ์ทจ๊ธ‰ํ•˜๋ฏ€๋กœ ๋‹จ์–ด์˜ ์ค‘๊ฐ„ ๋ถ€๋ถ„์„ ์ •๋ ฌํ•œ ๊ฒƒ์€ ๋‹จ์–ด ์ง‘ํ•ฉ์˜ key๊ฐ€ ๋œ๋‹ค. ๋˜‘๊ฐ™์€ ๋‹จ์–ด๊ฐ€ ๋“ค์–ด์˜ฌ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ unordered_set์œผ๋กœ ๊ฐ™์€ key๋ฅผ ๊ฐ€์ง€๋Š” ๋‹จ์–ด๋“ค์€ ์ €์žฅํ•ด๋‘” ํ›„, ๋ฌธ์žฅ์—์„œ ๋‹จ์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฒดํฌํ•˜๋ฉด์„œ ๊ฐ™์€ key์— ํ•ด๋‹นํ•˜๋Š” ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉด ๋ฌธ์žฅ์„ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

 

์ฝ”๋“œ

#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <vector>
#include <sstream>

using namespace std;

unordered_map<string, unordered_set<string>> wordSet; // number์˜€๋‹ค๊ฐ€ ๊ฒน์น˜๋Š” ๋‹จ์–ด๊ฐ€ ์žˆ์„ ๊นŒ๋ด ๋ฐ”๊ฟˆ

int main() {
	int N;
	cin >> N;

	while (N--) {
		string word; cin >> word;
		string original = word;
		if(word.length() > 3){
			sort(word.begin() + 1, word.end() - 1);
		}

		if (wordSet.find(word) == wordSet.end()) {
			wordSet[word] = unordered_set<string>();
		}
		wordSet[word].insert(original);
	}

	int M; cin >> M;
	cin.ignore(); // '\n' ์ œ๊ฑฐํ•˜๊ธฐ

	while (M--) {
		string word;
		long long result = 1;
		
		getline(cin, word);
		
		size_t iter = word.find(' ');
		
		vector<string> check;
		stringstream ss(word);
		string temp;
		
		while (getline(ss, temp, ' '))
		{
			check.push_back(temp);
		}
		
		for(int i=0; i<check.size(); i++){
			string target = check[i];
			
			if(target.length() > 3){
				sort(target.begin()+1, target.end()-1);
			}
			
			result *= wordSet[target].size();
		}
		
		cout << result << '\n';
	}
}

 

  • c++์—์„œ ํ•œ ์ค„์„ ํ†ต์งธ๋กœ ๋ฐ›๊ณ  space๋ฅผ ๊ตฌ๋ถ„์ž๋กœ ํ•˜์—ฌ ๋‹จ์–ด๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ณผ์ •์ด ์‰ฝ์ง€ ์•Š๋‹ค. ๋จผ์ €, cin ์ž…๋ ฅ์€ ๊ณต๋ฐฑ์ด๋‚˜ '\n' ๋ฌธ์ž๋ฅผ ๋ฒ„ํผ์— ์ €์žฅํ•ด๋‘๊ณ  ๋ฌด์‹œํ•œ ์ฑ„ ๋ณ€์ˆ˜์— ์ž…๋ ฅ๊ฐ’์„ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— cin ์ž…๋ ฅ์„ ๋ฐ›๊ณ  ๋‚˜๋ฉด ๋ฒ„ํผ์— ๊ณต๋ฐฑ์ด๋‚˜ '\n' ๋ฌธ์ž๊ฐ€ ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค. getline ํ•จ์ˆ˜๋กœ ํ•œ ์ค„์˜ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ด๋‹น ํ•จ์ˆ˜๋Š” '\n'์ด ์ž…๋ ฅ๋˜๋ฉด ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ์‹คํ–‰๋œ cin์œผ๋กœ ์ธํ•ด ๋ฒ„ํผ์— ๋‚จ์•„์žˆ๋˜ '\n'๋ฌธ์ž๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ cin ํ›„ getline์„ ์‹คํ–‰ํ•  ๋•Œ๋Š” cin.ignore() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฒ„ํผ๋ฅผ ๋น„์šด ํ›„ ์‹คํ–‰ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ, ํ•ด๋‹น ๋ฌธ์ œ์—์„œ geline์„ ํ†ตํ•ด ํ•œ ์ค„์„ ํ•œ๊บผ๋ฒˆ์— ๋ฐ›๊ฒŒ ๋˜๋ฉด ๋ฒ„ํผ์˜ ํฌ๊ธฐ๊ฐ€ ๋ถ€์กฑํ•ด์„œ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๋ฐฑ๋ฌธ์ž(' ')๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹จ์–ด๋งˆ๋‹ค ๋Š์–ด์„œ ๋ฐ›๋Š” ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  • ๋‹จ์–ด์˜ ๊ธธ์ด๊ฐ€ 2 ์ดํ•˜์ธ ๊ฒฝ์šฐ๋Š” ๊ตณ์ด ์ •๋ ฌํ•  ํ•„์š”์—†์ด ์ž๊ธฐ ์ž์‹ ์„ key๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

๊ฒฐ๊ณผ

 

๋ฐ˜์‘ํ˜•

'Algorithm ๋ฌธ์ œ > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[c++] BOJ 20040 :: ์‚ฌ์ดํด ๊ฒŒ์ž„  (0) 2021.10.10
[c++] BOJ 7579 :: ์•ฑ  (0) 2021.10.10
[c++] BOJ 1253 :: ์ข‹๋‹ค  (0) 2021.09.28
[c++] BOJ 4195 :: ์นœ๊ตฌ ๋„คํŠธ์›Œํฌ  (0) 2021.09.28
[c++] BOJ 5430 :: AC  (0) 2021.09.07