본문 바로가기

TIL (since 2023.08.07 ~ )

2023-08-30 TIL (정수를 문자형으로 형변환 후 배열)

code kata

<정수 내림차순 배치하기>

함수 solution 은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를 들어 n이 118372면 873211을 리턴하면 됩니다.

<제한 조건>
n은 1이상 8000000000 이하인 자연수입니다.

 

<brainstorming>

해당 문제를 처음 보고 나서, 어떻게 접근하면 좋을지 고민하다가 어제 풀었던 문제와 비슷한 것 같아서

 

정수 형태인 n 을 문자형으로 바꾸고 문자의 순서를 재배치 시키는 방법을 고민해보았다.

 

하지만 아직 C# 에서 사용되는 문법과 함수에 미숙하고 모르는 내용이 많기 때문에

 

이번 문제도 한참을 고민하다 결국 구글링으로 찾아내었다..ㅠ

 

전에 사용하던 툴에서는 descend() 라는 함수를 사용하면 내림차순 배열이 가능했기 때문에 혹시 C#에도 내림차순 기능이

 

있지 않을까 생각해서 찾아보았지만 C#에서는 다른 형식의 문법구조를 가지고 있었다.

 

using System;

public class Solution {
	public long solution(long n) {
    	long answer = 0;
        char[] temp = n.ToString().ToCharArray();
        
        Array.Sort(temp);
        
        Array.Reverse(temp);
        
        answer = long.Parse(new string(temp));
        
        return answer;
    }
}

한 줄씩 뜯어서 살펴보자면,

 

char[ ] temp = n.ToString().ToCharArray();

=> 자연수 n 을 문자형으로 변환하고 글자별로 나뉜 char 배열로 한꺼번에 변환한다. 하지만 애초에 문자열이 Char형태가 모여있는 상태이기 때문에 가능하다. 그렇지 않으면 다른방법을 써야 할 듯하다.

 

Array.Sort(temp);

=> 배열을 오름차순(ascend)으로 정렬해주는 함수이다. 잘 기억해 두도록 하자

 

Array.Reverse(temp);

=> 배열을 뒤집는 함수로, 결국 오름차순이던 배열을 내림차순(descend)으로 바꿔준다.

 

answer = long.Parse(new string(temp));

=> temp 배열을 문자열로 만든 뒤 long 형태로 변환한다.

 

 

 

여기서 언급된 str() 형과 char() 형에 대해서 간단히 정리하자면,

string 형태는 문자, 즉 글자들이 합쳐져서 만들어진 것. 한마디로 '문자열' 이라고 할 수 있고,

 

char 형태는 string형태를 이루는 한 글자 한 글자들을 각각 일컫는 말이다.

 

한마디로, 

 

"팀스파르타" : str

 

"팀" , "스" , "파" , "르" , "타" : char

 

인 것이다. 이것을 구분할 줄 아는가에 대한 코딩 테스트였다. 기억해 두도록 하자.