U E D R , A S I H C RSS

2002년도ACM문제샘플풀이/문제B



1. 상규, 재동

  • STL 사용하면 쉽게 풀 수 있다는 걸 알고 있었지만 일부러 STL을 사용하지 않았습니다. 알고리즘적으로 머리를 쓰는 걸 훈련하기 위해...^^

~cpp 
#include <iostream>
#include <string>
using namespace std;

int numOfData;
string inputData[10];
int outputData[10];

string pattern;

int getIndex(char c)
{
	int index;
	index=pattern.find_first_of(c);
	pattern = pattern.substr(0, index) + pattern.substr(index + 1);
	return index;
}

void input()
{
	cin >> numOfData;
	for(int i=0;i<numOfData;i++)
	{
		cin >> inputData[i];
	}
}

void process()
{
	for(int i=0;i<numOfData;i++)
	{
		int index;
		int addNumber = 40320;
		pattern = "abcdefgh";

		for(int j=0;j<8;j++) 
		{
			index = getIndex(inputData[i][j]);
			addNumber /= (8-j);
			outputData[i] += addNumber * index;
		}
		outputData[i]++;
	}
}

void output()
{
	for(int i=0;i<numOfData;i++)
	{
		cout << outputData[i] << endl;
	}
}

void main()
{
	input();
	process();
	output();
}

2. 인수

  • 처음 딱 보고, 앗 재귀다--; 이러고 막 고민하다가. 문득 STL 공부하다가 본 수열 제네레이터가 생각남
  • 10분만에 끝남
  • 비쥬얼 어시스트가 없었다면 수열 제네레이터 어떻게 쓰는지 몰랐을지도 --;

~cpp 
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int checkPerm(string& str);

int main()
{
	string given;
	cin >> given;
	
	cout << checkPerm(given);

	return 0;
}

int checkPerm(string& given)
{
	string str = "abcdefgh";

	for(int i = 1 ; i <= 40320 ; ++i)
	{
		if(str == given)
			return i;
		next_permutation(str.begin(), str.end());
	}
}



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:09
Processing time 0.0156 sec