본문 바로가기
CodeSignal

isLucky

by Doromi 2023. 12. 1.
728x90
반응형
주어진 티켓 번호 n이 행운의 번호인지 여부를 판단하라고 합니다. 여기서 행운의 번호는 다음과 같이 정의됩니다:

티켓 번호는 일반적으로 짝수 자릿수로 이루어져 있습니다.
티켓 번호를 반으로 나눈 경우, 첫 번째 반과 두 번째 반의 각 자릿수 합이 서로 같아야 합니다.
예를 들어, 123006은 행운의 번호입니다. 왜냐하면 1+2+3이 0+0+6과 같기 때문입니다.

티켓 번호 n이 주어졌을 때, 이 번호가 행운의 번호인지 아닌지를 판단하는 것이 문제의 목표입니다.

 

bool solution(int n) {
    int[] ch = new int[6];
    int rest = n;
    int idx = 0;
    while(rest>0){
        ch[idx++] = (rest%10);
        rest /= 10;
    }
    int front = 0;
    int back = 0;
    for(int i = 0;i<idx/2;i++){
        front += ch[i];
    }
    for(int i = idx/2;i<idx;i++){
        back += ch[i];
    }
    return front==back ? true : false;
}
int[] ch = new int[6];: 티켓 번호의 각 자릿수를 저장할 배열 ch를 선언합니다. 문제에서 티켓 번호는 Guaranteed constraints:10 ≤ n < 106 로 명시되어 있으므로 6으로 고정된 크기로 배열을 선언했습니다.

int rest = n; int idx = 0;: 입력된 티켓 번호 n을 나머지를 이용하여 각 자릿수를 배열에 저장합니다. idx 변수는 현재까지 저장된 자릿수의 개수를 나타냅니다.

while(rest > 0) { ch[idx++] = (rest % 10); rest /= 10; }: 입력된 티켓 번호의 각 자릿수를 배열에 저장합니다. rest를 10으로 나눈 나머지가 해당 자릿수이며, 이를 배열에 저장한 후 rest를 10으로 나누어 자릿수를 하나씩 줄입니다.

int front = 0; int back = 0;: 티켓 번호를 반으로 나눌 때, 앞 부분의 자릿수 합을 나타내는 front와 뒷 부분의 자릿수 합을 나타내는 back을 초기화합니다.

for(int i = 0; i < idx / 2; i++) { front += ch[i]; }: 배열의 앞 부분에 해당하는 자릿수의 합을 계산합니다.

for(int i = idx / 2; i < idx; i++) { back += ch[i]; }: 배열의 뒷 부분에 해당하는 자릿수의 합을 계산합니다.

return front == back ? true : false;: 앞 부분과 뒷 부분의 자릿수 합이 서로 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
728x90
반응형

'CodeSignal' 카테고리의 다른 글

alternating Sums  (2) 2023.12.03
Sort by Height  (0) 2023.12.02
commonCharacterCount  (0) 2023.11.28
All Longest Strings  (0) 2023.11.27
matrixElementsSum  (0) 2023.11.25