본문 바로가기
CodeSignal

isCryptSolution

by Doromi 2024. 3. 7.
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;
}
  1. 먼저, 주어진 crypt 배열에서 각 문자열을 해독하여 숫자로 변환하고, 이를 li 리스트에 저장합니다. 동시에 각 문자열에서 첫 번째 문자가 0인지 여부를 isZero 리스트에 저장합니다.
  2. findVal 함수는 주어진 문자열과 일치하는 숫자를 찾아 반환합니다.
  3. 각 문자열의 숫자를 찾고 이를 li 리스트에 저장한 후, 첫 번째와 두 번째 숫자의 합이 세 번째 숫자와 일치하는지 확인합니다.
  4. 첫 번째 숫자와 두 번째 숫자 중에 하나라도 0으로 시작하는 경우, 세 번째 숫자의 길이가 1보다 크면 false를 반환합니다.
  5. 두 숫자의 합이 세 번째 숫자와 일치하면 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