fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. //수에서 영어로
  7. string arabiaToeng(int n)
  8. {
  9. string r;
  10. if (n == 0) r = "zero";
  11. else if (n == 1) r = "one";
  12. else if (n == 2) r = "two";
  13. else if (n == 3) r = "three";
  14. else if (n == 4) r = "four";
  15. else if (n == 5) r = "five";
  16. else if (n == 6) r = "six";
  17. else if (n == 7) r = "seven";
  18. else if (n == 8) r = "eight";
  19. else if (n == 9) r = "nine";
  20. else if (n == 10) r = "ten";
  21. return r;
  22. }
  23.  
  24. //영어에서 수로
  25. int arabia(string s)
  26. {
  27. int r;
  28. if (s == "zero") r = 0;
  29. else if (s == "one") r = 1;
  30. else if (s == "two") r = 2;
  31. else if (s == "three") r = 3;
  32. else if (s == "four") r = 4;
  33. else if (s == "five") r = 5;
  34. else if (s == "six") r = 6;
  35. else if (s == "seven") r = 7;
  36. else if (s == "eight") r = 8;
  37. else if (s == "nine") r = 9;
  38. else if (s == "ten") r = 10;
  39. return r;
  40. }
  41.  
  42. //연산자에 맞는 연산 진행
  43. int operation(int a, int b, char op)
  44. {
  45. int r;
  46. switch (op)
  47. {
  48. case '+':
  49. r = a + b;
  50. break;
  51. case '-':
  52. r = a - b;
  53. break;
  54. case '*':
  55. r = a * b;
  56. break;
  57. default:
  58. break;
  59. }
  60. return r;
  61. }
  62.  
  63. int main(void)
  64. {
  65. int t;
  66. cin >> t;
  67.  
  68. while (t--)
  69. {
  70. string A, B, result, com;
  71. char op, temp;
  72. int a, b;
  73. cin >> A >> op >> B >> temp >> result;
  74. a = arabia(A); //수로 변환
  75. b = arabia(B);
  76. a = operation(a, b, op); //연산 진행
  77. com = arabiaToeng(a); //결과값 문자열로 변환
  78. if (com.length() != result.length() || (a < 0 && a > 10)) //길이가 다르거나 값이 초과했을 경우
  79. {
  80. cout << "No" << endl;
  81. continue;
  82. }
  83. int cnt = 0;
  84. int memo[10]; //j값 중복 방지
  85. for (int i = 0; i < com.length(); i++)
  86. {
  87. for (int j = 0; j < result.length(); j++)
  88. {
  89. int k = -1;
  90. for (int q = 0; q < i; q++) {
  91. if (memo[q] == j) //이미 전에 j값과 같은 값을 인식했을 경우
  92. {
  93. k = j;
  94. break;
  95. }
  96. }
  97. if (k == j) continue; //해당 j 제외
  98. if (com[i] == result[j]) //같은 문자일 경우
  99. {
  100. memo[i] = j; //현재 위치의 j값 저장(중복 방지)
  101. cnt++; //같은 값이 몇개인지 확인
  102. break;
  103. }
  104. }
  105. }
  106. if (cnt == com.length()) cout << "Yes" << endl; //같은 값이 문자열 길이와 동일하다면
  107. else cout << "No" << endl;
  108. }
  109. }
Success #stdin #stdout 0s 5512KB
stdin
2
two + three = ivef
zero * zero = one
stdout
Yes
No