Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

피너클의 it공부방

백준 15312 이름 궁합 (c++) : 피너클 본문

백준

백준 15312 이름 궁합 (c++) : 피너클

피너클 2022. 5. 11. 23:50
728x90
반응형

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

 

15312번: 이름 궁합

영어 대문자 알파벳 26개의 획수는 순서대로 3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1 로 정한다. (출제자가 알파벳 대문자를 쓰는 방법이 기준이다)

www.acmicpc.net

단순한 구현 문제다.

string a, b;
vector<int> v;
int alpha[] = { 3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1 };

입력받을 string a, b와 숫자를 저장할 벡터 v, 각 영어의 획수를 저장한 배열 alpha를 선언한다.

cin >> a >> b; 
int i;
for (i = 0; i < a.length(); i++) {
	v.push_back(alpha[a[i] - 'A']);
	v.push_back(alpha[b[i] - 'A']);
}

값을 입력받은다음 int i를 선언한다.

그후 반복문을 돌리며 v에 a와 b의 획수를 번갈아가며 넣는다.

1 3 2 3 2 2

v에는 다음과 같이 값이 저장된다.

while (1) {
	vector<int> a;
	for (int i = 0; i < v.size() - 1; i++) {
		a.push_back((v[i] + v[i + 1]) % 10);
	}

while(1)을 실행한뒤 새로운 벡터 a를 선언한다.

그후 (v의 사이즈 - 1) 만큼 for문을 돌리며 a에 (v[i] + v[i+1]) % 10의 값을 넣어준다.

         
1 3 2 3 2 2

위를 벡터 a, 아래를 벡터 v라 했을때

4        
          1                     3           2 3 2 2

v[0]과 v[1]을 더한 값이 a에 들어가고

4 5      
1           3                     2           3 2 2

v[1]과 v[2]을 더한 값이 a에 들어간다.

위의 과정을 계속해서 반복해 a를 채워준다.

	if (a.size() == 2) {
		cout << a[0] << a[1] << endl;
		break;
	}
	v.clear();
	for (int i = 0; i < a.size(); i++) v.push_back(a[i]);
}

만약 a의 사이즈가 2라면 그대로 출력해주고 while문을 빠져나온다.

그후 v안의 값들을 전부 없엔뒤 a값을 v에 전부 넣는다.

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>

using namespace std;

string a, b;
vector<int> v;
int alpha[] = { 3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1 };

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

	cin >> a >> b; 
	int i;
	for (i = 0; i < a.length(); i++) {
		v.push_back(alpha[a[i] - 'A']);
		v.push_back(alpha[b[i] - 'A']);
	}
	while (1) {
		vector<int> a;
		for (int i = 0; i < v.size() - 1; i++) {
			a.push_back((v[i] + v[i + 1]) % 10);
		}
		if (a.size() == 2) {
			cout << a[0] << a[1] << endl;
			break;
		}
		v.clear();
		for (int i = 0; i < a.size(); i++) v.push_back(a[i]);
	}

}

전체코드다.

728x90
반응형
Comments