Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 잔
- 컴퓨터공학 #c #c언어 #문자열입력
- BOJ #컴퓨터공학 #C++ #알고리즘 #자료구조
- 컴퓨터공학 #Java #자바 #클래스 #객체 #인스턴스
- 컴퓨터공학 #자료구조 #스택 #c++ #알고리즘 #백준문제풀이
- HTML #CSS
Archives
- Today
- Total
영벨롭 개발 일지
[백준 BOJ][C++]1339번 단어 수학 풀이: 브루트 포스 본문
https://www.acmicpc.net/problem/1339
초기 풀이에선 자리수에 따라 단어들을 일일이 비교하며 해당 알파벳에 숫자를 부여하였더니 틀렸습니다가 떠서 구글링에 힘을 얻어 해결하였습니다..ㅎㅎ
몇몇 사이트를 참고하니 풀이과정은 생각보다 간단했습니다.
각각의 단어에서 해당 알파벳의 자릿수를 저장해두고 해당 자릿수들의 모임을 내림차순 정렬하여 9부터 차례대로 숫자를 곱하여 더해주면 됩니다.
#include<iostream>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<string>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
int n;
int num[27] = { 0, };
vector<string> words;
priority_queue<int, vector<int>, less<int>> pq;
void set_num() {
for (int i = 0; i < n; i++) {
int pow = 1;
for (int j = words[i].size() - 1; j >= 0; j--) {
int alpha = words[i][j] - 65;
num[alpha] += pow;
pow *= 10;
}
}
for (int i = 0; i < 27; i++) {
if (num[i] != 0)
pq.push(num[i]);
}
}
int solution() {
int sum = 0;
int cnt = 9;
set_num();
while (!pq.empty()) {
sum += (pq.top() * cnt);
pq.pop();
cnt--;
}
return sum;
}
int main(void) {
cin >> n;
for (int i = 0; i < n; i++) {
string temp;
cin >> temp;
words.push_back(temp);
}
sort(words.begin(), words.end(),
[](string a, string b) { return a.size() > b.size(); });
cout << solution() << endl;
return 0;
}
반응형
'알고리즘 문제 풀이 > BOJ' 카테고리의 다른 글
[백준 BOJ][C++]2263번 트리의 순회: 분할 정복 (0) | 2022.07.19 |
---|---|
[백준 BOJ][C++]1197번 최소 스패닝 트리 풀이 - Kruskal MST 알고리즘 (0) | 2022.06.09 |
[백준 BOJ][C++]1931번 회의실 배정 풀이: 그리디 알고리즘 (0) | 2022.05.10 |
[백준 BOJ][C++]2146번 다리 만들기 풀이: DFS & BFS (0) | 2022.05.07 |
[백준 BOJ][C++]1654번 랜선 자르기 풀이: 이진 탐색 (0) | 2022.05.04 |