알고리즘,손코딩 문제

프로젝트 오일러 문제 22 : names.txt에 들어있는 모든 이름의 점수를 계산해서 더하면 얼마입니까?

알통몬_ 2017. 3. 11. 20:31
반응형

names.txt




안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

5천개 이상의 영문 이름들이 들어있는 

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);

}

}

반응형