[BOJ]1871号:良いナンバープレート


✔10.質問する



😎 ソースコード

#include <iostream>
#include <string>
#include <vector>
#include <cmath>

using namespace std;

void solution(int n, vector<string> v){
  for (int j = 0; j < n; ++j) {
    string answer = "", tempStr = "";
    int numFront = 0, numRear = 0, getAlphaNum = 0;

    for (int k = 0; k < 8; ++k) {
      // 번호판 앞의 세 문자열 계산
      for (int m = 2; m >= 0; --m) {
        getAlphaNum = (int(v[j][m]) - 65) * pow(26, k);
        numFront += getAlphaNum;
        k++;
      }
      
      // 번호판 뒤의 네 문자열 숫자로 변환
      for (int y = 4; y < 8; ++y) {
        tempStr += v[j][y];
        k++;
      }
      numRear = stoi(tempStr);
      
      // 좋은 번호인지 판별
      if (abs(numFront - numRear) <= 100){
        answer += "nice";
      } else {
        answer += "not nice";
      }
    }
    
    cout << answer << endl;
  }
}

int main(){
  int n;
  vector<string> v;
  string input;
  
  cin >> n;
  
  for (int i = 0; i < n; ++i) {
    cin >> input;
    v.push_back(input);
  }
  
  solution(n, v);
  
  return 0;
}

問題が終わったら


アスキーのパスワードで解読します.
大文字「A」は65です.
各文字列要素から65を減算すると、対応するアルファベット番号が得られるので、これを用いて計算することができる.