728x90
반응형
암호화된 문자열을 해독하여 올바른 숫자로 변환하여 검증하는 것입니다. 세 개의 문자열로 이루어진 crypt 배열과 두 개의 문자열로 이루어진 solution 배열이 주어집니다. 각 문자는 0부터 9까지의 숫자를 나타냅니다. crypt 배열의 각 문자열을 해독하여 올바른 숫자로 변환한 후, 덧셈 연산을 수행하여 crypt 배열의 마지막 문자열이 solution 배열의 합과 동일한지 확인해야 합니다. 또한 다음 규칙을 따라서 암호화를 수행합니다.
각 문자열의 첫 번째 문자는 0으로 시작하지 않습니다. 따라서 "00123"과 같은 문자열은 유효하지 않습니다.
각 문자는 0부터 9까지의 숫자 중 하나를 나타냅니다.
각 문자열의 길이는 1 이상 15 이하입니다.
bool solution(string[] crypt, char[][] solution) {
List<int> li = new List<int>();
List<bool> isZero = new List<bool>();
foreach(string s in crypt){
char[] crypt_char = s.ToCharArray();
int val = 0;
int len_idx = crypt_char.Length - 1;
for(int i = 0;i<crypt_char.Length;i++){
int temp = findVal(solution,crypt_char[i]);
if(i == 0 && temp == 0 ){
isZero.Add(true);
}
for(int j = 0;j<len_idx;j++){
temp *= 10;
}
val += temp;
len_idx --;
}
li.Add(val);
}
if(isZero.Count>=1 && crypt[2].Length>1){
return false;
}
if(li[0] + li[1] == li[2]){
return true;
}
return false;
}
int findVal(char[][] solution, char key){
for(int i = 0;i<solution.Length;i++){
if(solution[i][0] == key) return solution[i][1]-'0';
}
return -1;
}
- 먼저, 주어진 crypt 배열에서 각 문자열을 해독하여 숫자로 변환하고, 이를 li 리스트에 저장합니다. 동시에 각 문자열에서 첫 번째 문자가 0인지 여부를 isZero 리스트에 저장합니다.
- findVal 함수는 주어진 문자열과 일치하는 숫자를 찾아 반환합니다.
- 각 문자열의 숫자를 찾고 이를 li 리스트에 저장한 후, 첫 번째와 두 번째 숫자의 합이 세 번째 숫자와 일치하는지 확인합니다.
- 첫 번째 숫자와 두 번째 숫자 중에 하나라도 0으로 시작하는 경우, 세 번째 숫자의 길이가 1보다 크면 false를 반환합니다.
- 두 숫자의 합이 세 번째 숫자와 일치하면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
예외처리를 하기 위해서,
List<bool> isZero = new List<bool>();
list 를 선언하여, 첫문자의 값이 0인 경우에 isZero 리스트에 담았습니다.
if(isZero.Count>=1 && crypt[2].Length>1){
return false;
}
3개의 string 중에서 1개 이상이 첫 문자 값이 0 인 경우를 포함한다면 return false 를 하도록 하였습니다.
하지만, 이 경우,
crypt: ["AA", "AA", "AA"]
solution: [["A","0"]]이 testcase 에서는 true 가 나와야되기 때문에 crypt[2].Length>1 이러한 조건을 추가해, 마지막 string의 길이를 확인하여 return true 에 걸리도록 하였습니다.
728x90
반응형
'CodeSignal' 카테고리의 다른 글
isListPalindrome (0) | 2024.03.09 |
---|---|
removeKFromList (0) | 2024.03.08 |
sudoku2 (2) | 2024.03.06 |
rotateImage (1) | 2024.02.28 |
firstNotRepeatingCharacter (0) | 2024.02.27 |