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 | 31 |
Tags
- bulk update
- 보행자 천국
- 불량 사용자
- 튜플
- 가사 검색
- 티스토리
- 트라이 #trie #알고리즘
- 프로그래머스
- pycon
- 징검다리 건너기
- trie
- Spring Boot
- 알고리즘
- Tistory
- 호텔 방 배정
- Open API
- jdbc
- Python
- 카카오 인턴
- CleanCode
- 트라이
- 티스토리 open api
- 크레인 인형뽑기 게임
Archives
- Today
- Total
택시짱의 개발 노트
[백준] 1339번 - 단어 수학 본문
링크
https://www.acmicpc.net/problem/1339
풀이
여러 단어가 주어졌을때 단어를 숫자로 변환한 값의 최대 합을 구하는 문제이다.
문제를 풀기전에 생각 해봐야 할것은
1. 알파벳이 어느 위치에 있는지
2. 알파벳이 얼마나 나오는지
위의 두가지를 이용하면 문제를 풀 수 있다.
2번째 예시를 예로 들어보겠습니다.
알파벳의 위치에 따라 체크를 해주게 되면 밑의 표 처럼 되고
알파벳이 얼마나 나오는지 값에 따른 정렬을 하여 9부터 0까지 곱해주어 더해주면 밑의 표처럼 나오게 됩니다.
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<string>
#include<set>
#include<map>
#include<cstring>
#define SIZE 1010
using namespace std;
typedef long long int ll;
const int INF = 2000000000;
map<char, int> _map;
priority_queue<int> pq;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N; cin >> N;
for (int i = 0; i < N; i++) {
string s; cin >> s;
int zari = 1;
for (auto it = s.rbegin(); it != s.rend(); it++) {
if (_map.find(*it) == _map.end())
_map[*it] = zari;
else
_map[*it] += zari;
zari *= 10;
}
}
for (auto it = _map.begin(); it != _map.end(); it++) {
pq.push(it->second);
}
int num = 9, sum = 0;
while (!pq.empty()) {
sum += pq.top() * num--;
pq.pop();
}
cout << sum;
}
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스] 정수 삼각형 (0) | 2020.02.07 |
---|---|
[프로그래머스] 타일 장식물 (0) | 2020.02.07 |
[백준] 2206번 - 벽 부수고 이동하기 (0) | 2020.02.01 |
[백준] 3190번 - 뱀 (0) | 2020.01.30 |
[프로그래머스] 가장 먼 노드 (0) | 2020.01.26 |
Comments