티스토리 뷰

#include <stdio.h>
#include <string.h>

int main(void)
{
	int num = 9; //9~0
	int ten[8] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000}; 
	int a[26] = {0}; //alaphabet maximum
	int q[26] = {0}; // queue
	int qcnt = 0; 
	int visit[26] = {0};
	int sum = 0;
	
	int n;
	scanf("%d", &n);
	getchar();
	while(n--) {
		//input
		char s[12] = {0};
		scanf("%s", s);
		int len = strlen(s);
		for(int i = 0; i<len/2; i++) { //reverse
			int tmp = s[i];
			s[i] = s[len-1-i];
			s[len-1-i] = tmp;
		}
		for(int i = len-1; i>=0; i--) {
			a[s[i]-'A'] += 9*ten[i]; //maximum
			if(visit[s[i]-'A'] == 0) { //new alphabet
				visit[s[i]-'A']++;
				q[qcnt++] = s[i]-'A';
			}
		}
	}
	
	for(int i = 0; i<qcnt; i++) { //sort max~min
		for(int j = i+1; j<qcnt; j++) {
			if(a[q[i]] < a[q[j]]) {
				int tmp = q[j];
				q[j] = q[i];
				q[i] = tmp;
			}
		}
	}
	
    //num : 9~0
	for(int i = 0; i<qcnt; i++) sum += (a[q[i]]/9) * (num--);
	
	
	printf("%d", sum);
}

 

풀이

1) 문자열로 입력받으면, 순서를 뒤집습니다.

2) 문자열의 문자마다 9*(10^그 문자의 십의 자릿수)한 값을 a[특정 문자] 에 더해줍니다.

9를 곱한 이유는 어떤 문자가 최댓값을 가지는 지를 비교하기 위해서입니다.

 

3) 전에 없었던 문자가 있다면 q[](큐)에 넣어줍니다.

4) a[] 즉 어떠한 문자를 9로 잡았을 때 얻을 수 있는 최대 값으로 비교하여, a[]로 q[]을 내림차순으로 정렬합니다.

5) q[](큐)에 있는 문자들의 a[]값에 9를 나눈 뒤, 순서대로 9부터 0까지 곱해준 값을 sum에 누적합니다.

6) sum을 출력합니다.

'c언어 > BAEKJOON' 카테고리의 다른 글

c언어 1806번 부분합 (백준)  (0) 2022.10.11
c언어 12904번 A와 B (백준)  (0) 2022.10.01
c언어 1417번 국회의원 선거 (백준)  (0) 2022.09.29
c언어 25597번 푸앙이와 러닝머신  (0) 2022.09.22
c언어 1074번 Z (백준)  (0) 2022.08.24
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함