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 |