문제
└https://www.acmicpc.net/problem/1339
1339번: 단어 수학
첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대
www.acmicpc.net
코드
import java.util.*;
import java.io.*;
public class WordMath {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
String[] list = new String[N];
int[] alpha = new int[26];
for (int i = 0; i < N; i++) {
String s = br.readLine();
list[i] = s;
}
for (int i = 0; i < N; i++) {
int digits = (int) Math.pow(10, list[i].length() - 1); // 자릿수 값.
for (int j = 0; j < list[i].length(); j++) { // 입력된 문자의 길이만큼 자릿수가 정해짐.
alpha[list[i].charAt(j) - 65] += digits; // 모두 대문자로 입력이므로 -65를 해주면 0부터 25까지 들어감.
digits /= 10; // 다음 자릿수로 넘어가기.
}
}
Arrays.sort(alpha);
int sum = 0;
int nineToZero = 9; // 순서대로 9~0 넣기.
for (int i = alpha.length - 1; i >= 0; i--){ // 리버스 정렬을 못하므로 반대로 반복문 실행
if(alpha[i] == 0){ // 0이 나오면 그 이후는 숫자가 없으므로 종료
break;
}
sum += alpha[i]*nineToZero;
nineToZero--;
}
bw.write(sum + "\n");
bw.flush();
}
}
풀이
└예문으로
2
GCF
ACDEB
를 입력하면 저장을 10000A, 1B, 1000C, 10C, 100D, 10E, 1F, 100G 이렇게 자릿수를 정해주고 중복이 같은 문자는 더해 주어 10000A, 1B, 1010C, 100D, 10E, 1F, 100G 이렇게 지정해 놓아주어 문제를 풀었다. 이렇게 저장해 놓은 알파벳들을 정렬 시켜주고 반복문을 거꾸로 돌려 9부터 0까지 값을 곱해주어 sum변수에 더해준다.
느낀점
└ 저 풀이 방법도 어느 한분의 도움을 듣고 저러한 방식을 코드로 짜봤는데 다른 문제도 그렇고 알고리즘을 생각해 내는 것이 어렵다고 느끼지만, 더 많은 문제를 풀면서 다양한 사고방식을 일깨울 것입니다.
'2021하계 모각코' 카테고리의 다른 글
[또 LIE ?] 5주차 결과 (0) | 2021.08.11 |
---|---|
[또 LIE ?] 5주차 계획 (0) | 2021.08.11 |
[또 LIE ?] 4주차 계획 (0) | 2021.08.04 |
[또 LIE ?] 3주차 결과 (0) | 2021.07.28 |
[또 LIE ?] 3주차 계획 (0) | 2021.07.28 |