BOJ 1339 : 단어수학

·2023년 2월 27일
0

알고리즘 문제 풀이

목록 보기
69/165
post-thumbnail

풀이 요약

수학 문제

풀이 상세

  1. 알파벳을 NN 의 자리가 크면서, 갯수가 많은 수로 정렬 한다.

  2. 예를 들어 AAAAAA, BABBBABB 라면 AA(2100)+(110)+(11)=211(2*100)+(1*10)+(1*1) = 211, BB(11000)+(110)+(11)=1011(1*1000)+(1*10)+(1*1) = 1011 이 된다. 따라서 BB 가 최댓값인 99 가 되며, AA 는 그 다음값이 된다.

  3. 위의 식을 기반으로 구현하면 답이 나온다.

배운점

  • for문에서 혹은 sort() 에서 마지막 인덱스를 나타내기 위한 용도로, sizeof(arr), arr.length() 를 썼는데 본래 길이인 10이 아닌 다른 값(240)이 나오더라. 왜그런걸까
#include <iostream>
#include <algorithm>
using namespace std;
const int arr_LEN = 10;
const int A_LEN = 26;
int N, A[A_LEN];
string arr[arr_LEN];

bool cmp(int n1, int n2) {
    return n1 > n2;
}

void input() {
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> arr[i];
    }

    for (int i = 0; i < N; i++) {
        int idx = 1;
        for (int j = arr[i].length() - 1; j >= 0; j--) {
            A[arr[i][j] - 'A'] += idx;
            idx *= 10;
        };
    }

    sort(A, A + A_LEN, cmp);
}

int solve() {
    int sum = 0;
    int cnt = 9;
    for (int i = 0; i < 10; i++) {
        sum += A[i] * cnt--;
    }
    return sum;
}

void output(int ans) {
    cout << ans;
}

int main() {
    input();
    int ans = solve();
    output(ans);
}
profile
새로운 것에 관심이 많고, 프로젝트 설계 및 최적화를 좋아합니다.

0개의 댓글