C#으로 풀기 - 자연수 뒤집어 배열로 만들기

Amberjack·2024년 2월 2일
0

Codekata

목록 보기
2/16

👨‍💻 자연수 뒤집어 배열로 만들기

문제 링크 : 프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/12932?language=csharp

문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한 조건
n은 10,000,000,000이하인 자연수입니다.

입출력 예

nreturn
12345[5,4,3,2,1]

1차 풀이

public int[] solution(long n)
{
    Stack<int> stack = new Stack<int>();

    while(n > 0)
    {
        Stack.Push((int)(n % 10));
        n /= 10;
    }

    int[] answer = stack.ToArray();

    return answer;
}

맨 처음에는 고민을 좀 해보다가 n에 10을 나머지 연산하여 Stack에 넣어주면 어떨까? 라는 생각을 했고 그렇게 문제를 해결해보려 했다. 하지만 다 작성하고 나니 문득 든 생각이, '내가 출력하는 게 아니고 뒤집힌 배열을 return해야 하는데 Stack으로 가능할까?'라는 생각이었다. 아니나 다를까, stack.ToArray()를 하니 뒤집힌 숫자가 다시 한번 뒤집어져 원래 n대로 출력이 되었다.

2차 풀이

때문에 뒤집힌 채로 넘겨주기 위해서는 Queue를 사용해야 겠다라는 생각이 들었다.

public int[] solution(long n)
{
    Queue<int> q = new Queue<int>();

    while(n > 0)
    {
        q.Enqueue((int)(n % 10));
        n /= 10;
    }

    int[] answer = q.ToArray();

    return answer;
}

했더니 내가 원하는대로 출력이 되었다! 이것이 정답임이 틀림없었다. 하지만 문제는 Queue를 사용하기 위해서는 System.Collections.Generic;을 using해야 하는데, 프로그래머스에는 자동으로 import가 되지 않는 것 같았다. 때문에 Queue를 인식하지 못하고 q라는 지역 변수가 선언되지 않았다며 에러를 출력했다.

3차 풀이...

public int[] solution(long n)
{
    int[] temp = new int[11];
    int i = 0;
    
    for(i = 0; n > 0; i++, n /= 10)
    {
        temp[i] = (int) (n % 10);
    }

    int[] answer = new int[i];

    for(int j = 0; j < i; j++)
    {
        answer[j] = temp[j];
    }

    return answer;
}

아쉽지만 배열을 하나 더 만들어 넣어주는 것으로 해결했다. temp의 크기를 11로 잡은 것은, 문제에서 n이 10,000,000,000이하인 자연수라고 했기 때문에 n의 자리 수만큼 크기로 선언을 했다.

0개의 댓글