본문 바로가기

algorithm/BOJ

백준 1339_단어 수학(C++)

 

www.acmicpc.net/problem/1339

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

[문제 풀이]

수학을 통해 문제를 해결했습니다.

 

이 문제는 단순 수학을 통해 문제를 해결하였습니다. 입력으로 들어온 문자열 중 가장 높은 자리를 많이 가진 알파벳을 골라 차례대로 높은 숫자를 부여하면 되는 문제였습니다.

예를 들어, 아래와 같이 입력이 들어왔을 때

2

GCF

ACDEB

 

A = 10000, B = 1, C = 1010, D = 100, E = 10, F = 1, G = 100으로 계산하여 내림차순으로 정렬하여 9부터 곱해줘서 더하면 되는 문제였습니다.

[코드]

#include<iostream>
#include<algorithm>

using namespace std;

int arr[26] = { 0, };

int N, Answer = 0;

bool compare(int x, int y) {
	return x > y;
}

int main() {

	cin >> N;

	for (int i = 0; i < N; i++) {
		string str;
		cin >> str;

		int ten = 1;

		for (int j = str.length() - 1; j >= 0; j--) {
			
			arr[str.at(j) - 'A'] += ten;
			ten *= 10;
		}
	}

	sort(arr, arr+26, compare);

	int num = 9;
	int i = 0;

	while (1) {

		if (arr[i] == 0)
			break;

		Answer += arr[i] * num;

		i++;
		num--;
	}

	cout << Answer << endl;

	return 0;
}

 

 

'algorithm > BOJ' 카테고리의 다른 글

백준 1103_게임(C++)  (0) 2020.10.05
백준 1039_교환(C++)  (2) 2020.10.04
백준 1062_가르침(C++)  (0) 2020.09.30
백준 3055_암호만들기(C++)  (0) 2020.09.29
백준 3055_탈출(C++)  (0) 2020.09.28