[C++] Kick Start 2021 Round H - Transform the String

영어 문제 풀이도 어색하고 킥 스타트 자체 플랫폼도 어색해서 왕창 돌려보았기 때문에 Attempt가 9나 된다 크하학

#include <iostream>
#include <cmath> // abs
#include <algorithm> // min
using namespace std;

string S, F;
int T;

int main(int argc, char** argv){
  std::ios_base::sync_with_stdio(false);
	std::cin.tie(NULL);
	std::cout.tie(NULL);

  cin >> T; // 횟수

  for(int i=1; i<=T; i++){
    int num = 0;
    int minNum = 0;

    cin >> S >> F; // string 2개 입력받기

    for(int j=0; j<S.length(); j++){
      int a = S[j] - 'a'; // ASCII
      int tmp = 99999; // multiple 비교
      for(int k = 0; k<F.length(); k++){
        int b = F[k] - 'a'; // ASCII
        tmp = min(min((a - b + 26) % 26, (b - a + 26) % 26), tmp); // 정순, 역순
      }
      num += tmp;
    }

    cout << "Case #" << i <<": " << num << endl;
  }


  return 0;
}

구글은 문자열을 참 좋아한다. 문자열 문제 안 푼지가 좀 되어 무려 6번이나 틀렸다. 심지어 3번은 시간 초과... 대체 왜!

이렇게 돌고 도는 숫자를 구할때는 나머지를 사용하면 쉽다. 이건 백준의 뱀 문제를 풀었을 때도 이렇게 풀었는데 아직 익숙하지는 않지만 내것으로 만들어야할 것 같다.

  • (a - b + 26) % 26
    a = 0, b = 25 이라고 생각해 보자 (a, z가 주어진 경우), 이럴 때 우리가 원하는 값은 1이다.
    a - b의 값은 음수인 -25이다. 때문에 전체 알파벳 개수인 26을 더한 후 (음수 방지), 나머지를 구해 원하는 값인 1을 구해준다.
  • (b - a + 26) % 26
    마찬가지다.

수학적인 생각과 ASCII 값을 사랑하는 구글인 것 같다.

좋은 웹페이지 즐겨찾기