[BOJ] 1339번 단어 수학

문제 바로가기

접근

예로 AZ와 ZZ라는 두 단어가 주어진다면,
arr[A] = 10*1(첫번째 단어)
arr[Z] = 1*1(첫번째 단어) + 10*1(두번째 단어) + 1*1(두번째 단어)
다음과 같이 우선순위(?)를 계산해줄 수 있다.

이후에 우선순위를 내림차순으로 정렬하고 우선순위가 가장 큰 것부터 9~0의 가중치를 차례대로 대입하면 된다.

#include <bits/stdc++.h>
using namespace std;

int main() {
  std::ios::sync_with_stdio(false);
  int N;
  int sum = 0;
  int arr[26] = {0};
  string words[10];

  cin >> N;
  for(int i = 0; i < N; i++) {
    cin >> words[i];
    for(int c = 0; c < words[i].length(); c++) {
      arr[words[i][c] - 'A'] += pow(10, words[i].length() - c - 1);
    }
  }

  sort(arr, arr + 26, greater<int>());
  for(int i = 0; i < 10; i++)
    sum += arr[i] * (9 - i);
  cout << sum;
}

좋은 웹페이지 즐겨찾기