본문 바로가기
공부/코딩테스트

프로그래머스/C# - 자연수 뒤집어 배열로 만들기

by 잰쟁 2024. 5. 21.
728x90

 

문제 설명

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

 

제한 조건

  • n은 10,000,000,000이하인 자연수입니다.

 

입출력 예

 

풀이

using System;

public class Solution {
    public int[] solution(long n) {
        string str = n.ToString();
        int[] answer = new int[str.Length];
        for(int i =0;i<str.Length;i++)
        {
            answer[i] = int.Parse(str[i].ToString());
        }
        Array.Reverse(answer);
        return answer;
    }
}

 

인덱스를 사용하기 위해서 long 타입을 String 형식으로 변환해주고, 반환할 answer 배열의 크기를 str의 길이만큼 정해준다.

for문을 돌리며 answer[ ]에 str 문자열을 이루고 있는 문자를 int.Parse()를 이용해 int로 변환 후 하나씩 넣어준다.

이 때, string 문자열은 char 형식의 배열이므로 str[i]는 char 형식이 된다.

따라서 int.Parse()를 이용할 수 있도록 ToString()을 통해 char -> string 형식으로 변환해준다. 

(int.Parse()는 인자값으로 string만 받음)

 

만들어진 answer 배열을 Array.Reverse()를 이용해 순서를 반전시켜주면 끝!

 


 

시행착오)

 

자꾸 이 오류가 왜 뜨나 했는데,,,

using System; 을 안 써주고 있었다 헤헷,, 잊지 말자!!


 

의문점 )  int.Parse() 대신 Convert.ToInt32()를 사용하면 안 될까?

 

public class Solution {
    public int[] solution(long n) {
        string str = n.ToString();
        int[] answer = new int[str.Length];
        for(int i =0;i<str.Length;i++){
            answer[i] = Convert.ToInt32(str[i]);
        }
        Array.Reverse(answer);
        return answer;
    }
}

 

엥; 왜 53,52,51,50,49가 출력되지??

-> 찾아보니 Char 형식을 Convert.ToInt32()를 통해 반환할 경우 ASCII 코드를 반환한다!!

    (String 형식을 반환할 때는 정수(int)로 잘 반환함)

 

따라서 Convert.ToInt32()를 사용하여 반환할 경우 Char 형식을 String 형식으로 반환 후 사용해야한다.

for(int i =0;i<str.Length;i++)
{
    answer[i] = Convert.ToInt32(str[i].ToString());
}

 

이렇게 ToString()을 이용하여 반환 후 코드를 실행시키면

 

잘 출력된다~.~