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
- 불량 사용자
- pycon
- 튜플
- 카카오 인턴
- 가사 검색
- 크레인 인형뽑기 게임
- Python
- 보행자 천국
- 티스토리 open api
- Open API
- 프로그래머스
- jdbc
- 티스토리
- trie
- Tistory
- CleanCode
- 알고리즘
- Spring Boot
- 트라이 #trie #알고리즘
- 호텔 방 배정
- 트라이
- bulk update
- 징검다리 건너기
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