문제1457--흔해빠진 알고리즘으로 세계최강

1457: 흔해빠진 알고리즘으로 세계최강

실행시간 제한: 1 Sec  메모리사용 제한: 128 MB
제출: 63  통과: 10
[제출] [채점기록] [묻고답하기] [만든사람:]

문제 설명

코딩이라는 세계는 마치 무한한 가능성을 지닌 마법과도 같다.
각기 다른 알고리즘과 데이터 구조들은 마법의 주문처럼 작동하며, 그 잠재력은 무궁무진하다.
그러나 코딩이라는 세계에서도 '흔해 빠진' 알고리즘이라 불리는, 즉 너무나도 기본적이고 흔하게 사용되는 알고리즘들이 있다.
이 문제는 바로 그런 '흔해 빠진' 알고리즘을 통해 세계 최강에 도전하는 프로그래머의 이야기이다.

주인공 차차는 평범한 "귀여운" 학생으로, 특별할 것 없는 일상을 보내고 있었다.
그는 어린 시절부터 컴퓨터를 좋아하고, 프로그래밍을 배우기 시작하면서 어느 정도의 실력을 쌓았지만, 그다지 눈에 띄는 성과를 내지는 못했다.
하지만 어느 날, 차차는 우연히 접속한 온라인 프로그래밍 콘테스트에서 엄청난 도전을 마주하게 된다.

차차가 마주한 문제는 누구나 알고 있는 기본적인 알고리즘을 통해 문제를 해결해야 하는 기본적인 문제이다.
예를 들어, 반복문, 문자열 처리, 배열, 입출력 등이 있다. 
이런 흔한 알고리즘들은 조금만 변형해서 문제를 푼다면 이 세상 어떠한 문제를 다 풀어낼 수 있다.
불행하게도 차차는 문제의 핵심을 파악하고, 해결하기 위한 가장 단순하면서도 강력한 방법을 찾아내는 능력을 가지고 있지 않았다.

차차에게 주어진 가장 큰 도전과 어려웠었던 문제는 수백만 개의 그리스 문자가 입력되었을 때, 그리스 문자마다 지정된 고유한 숫자를 빠르게 합산하는 문제였다.
문제는 단순히 많은 데이터를 처리하는 것 이상의 도전이었다.
Alpha부터 Omega까지의 각 문자는 각기 다른 값을 가지며, 이 값들을 누적하여 최종 합계를 구하는 것이 목표였다.

그리스 문자의 목록은 다음과 같다:
  • Alpha, Beta, Gamma, Delta, Epsilon, Zeta
  • Eta, Theta, Iota, Kappa, Lambda, Mu
  • Nu, Xi, Omicron, Pi, Rho, Sigma
  • Tau, Upsilon, Phi, Chi, Psi, Omega
차차는 각 그리스 문자와 그에 해당하는 숫자를 맵핑하여 데이터를 신속하게 합산했다.
이 과정에서 차차는 기본적인 알고리즘의 조합과 최적화 코드를 만들어 세상 최강의 알고리즘을 만들었다.

이 이야기는 프로그래밍의 세계에서 흔히 접할 수 있는 알고리즘들을 통해 문제를 해결하는 과정을 담고 있다. 
또한, 문제를 풀어나가는 과정에서 도전과 성취, 그리고 어려운 문제를 풀어나가는 재밌는 경험을 제공하여 프로그래밍의 매력과 중요성을 전달하고자 한다.
차차의 이야기를 통해 흔해 빠진 알고리즘도 어떻게 사용하느냐에 따라 엄청난 힘을 발휘할 수 있음을 깨닫게 될 것이다.

입력 설명

첫번째 줄에는 테스트 케이스 수 (t < 3)
두번째 줄에는 그리스 문자 입력 개수 (0 < n < 10,000,000)
세번째 줄에는 그리스 문자별 점수 : 그리스 문자는 총 24개로, 점수는 각 문자의 순서대로 주어집니다. (각 그리스 문자별 점수는 100 <= s <= 500 이다.)
n개의 그리스 문자 입력 : 각 그리스 문자를 해당하는 점수로 변환하여 총합을 계산해야 합니다. 

그리스 문자의 순서는 이와 같습니다 :
Alpha, Beta, Gamma, Delta, Epsilon, Zeta, Eta, Theta, Iota, Kappa, Lambda, Mu, Nu, Xi, Omicron, Pi, Rho, Sigma, Tau, Upsilon, Phi, Chi, Psi, Omega

출력 설명

총합을 출력합니다. 
값의 범위는 int 형을 초과합니다. 따라서, 2^64 -1 이하를 수용 가능한 unsinged long long 타입을 권장합니다.

입력 예시 Copy

1
5
2 10 5 4 9 8 7 4 3 2 9 1 7 2 1 5 3 6 7 1 7 6 7 10 
Theta Beta Omega Theta Nu 

출력 예시 Copy

35

도움

  • 각 그리스 문자는 고유한 점수를 가지며, 문제는 수백만 개의 그리스 문자가 입력될 때 각 문자의 점수를 빠르게 합산하는 것입니다.
  • 각 그리스 문자를 해시 함수로 고유한 값으로 변환하고, 이를 통해 문자별 점수를 조회하여 합산합니다.
  • 이 방식은 해시 맵과 배열을 사용하여 문자 검색과 점수 합산을 효율적으로 수행하므로 대량의 데이터를 빠르게 처리할 수 있습니다.
  • 문자열 해시가 어떻게 동작되는지 공부해보신다면 좋습니다.
  • C++의 FASTIO는 반드시 사용하여야 합니다.
  • 출처/분류