안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
46KB짜리 텍스트 파일 names.txt 이 있습니다
이제 각 이름에 대해서 아래와 같은 방법으로 점수를 매기고자 합니다.
- 먼저 모든 이름을 알파벳 순으로 정렬합니다.
- 각 이름에 대해서, 그 이름을 이루는 알파벳에 해당하는 숫자(A=1, B=2, ..., Z=26)를 모두 더합니다.
- 여기에 이 이름의 순번을 곱합니다.
예를 들어 "COLIN"의 경우, 알파벳에 해당하는 숫자는 3, 15, 12, 9, 14이므로 합이 53, 그리고 정렬했을 때 938번째에 오므로 최종 점수는 938 × 53 = 49714가 됩니다.
names.txt에 들어있는 모든 이름의 점수를 계산해서 더하면 얼마입니까?
public class Question {
public static void main(String[] args) throws Exception {
BigInteger bi = new BigInteger("0");
String data = null; // ArrayList에 들어갈 값들
FileReader fileReader = new FileReader("파일경로.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader, 1);
List<String> wordList = new ArrayList<>();
int a; // 끝까지 읽었는지 확인할 정수형 변수
while ((a = fileReader.read()) != -1) {
data = bufferedReader.readLine();
}
fileReader.close();
String[] names = data.split(",");
for (int i = 0; i < names.length; i++) {
wordList.add(names[i]);
}
Collections.sort(wordList);
long gop = 1;
for (int j = 0; j < wordList.size(); j++) {
String[] name = wordList.get(j).split("");
long sum = 0;
gop = j+1;
for (int k = 0; k < name.length; k++) {
switch(name[k]){
case "A" :sum += 1; break;
case "B" :sum += 2; break;
case "C" :sum += 3; break;
case "D" :sum += 4; break;
case "E" :sum += 5; break;
case "F" :sum += 6; break;
case "G" :sum += 7; break;
case "H" :sum += 8; break;
case "I" :sum += 9; break;
case "J" :sum += 10; break;
case "K" :sum += 11; break;
case "L" :sum += 12; break;
case "M" :sum += 13; break;
case "N" :sum += 14; break;
case "O" :sum += 15; break;
case "P" :sum += 16; break;
case "Q" :sum += 17; break;
case "R" :sum += 18; break;
case "S" :sum += 19; break;
case "T" :sum += 20; break;
case "U" :sum += 21; break;
case "V" :sum += 22; break;
case "W" :sum += 23; break;
case "X" :sum += 24; break;
case "Y" :sum += 25; break;
case "Z" :sum += 26; break;
}
}
gop = gop * sum;
bi = bi.add(bi.valueOf(gop));
}
System.out.println(bi);
}
}