-
어제 지각을 해버려서.. 오늘은 지각을 안하려고 정신 바짝 차렸습니다.
대신에 흠.. 코드카타 한문제를 푸는데 너무 오랜시간을 쓴 것 같습니다.
정수 내림차순으로 배치하기
어제 풀었던 자연수 뒤집어 배열로 만들기와 매우 비슷한 느낌을 가진 문제입니다.
그래서 어제 새로 발견하게된 함수를 사용하려고 해봤는데요.
n.ToString().ToCharArray()
를 하게되면 배열값의 타입이 char가 됩니다.
저는 OrderBy를 이용해서 내림차순으로 정리하려고 했는데 배열값의 타입이 char라서 안된다고 하더라구요.
처음 생각했던 것과 달라서 약간 당황했는데 다시 그냥 좀 늘여써보려고 했습니다만 왜인지 계속 0을 return하더라구요..
그래서 결국에는 다른 분들의 풀이를 보게되었습니다.
return 타입이 배열이 아닌 long이다 보니깐 저번이랑 조금 다르게 접근을 해야했습니다.
n.ToString()을 해주고 이것을 int.Parse를 통해 int[]에 넣어주는 것까지는 동일했습니다.
long answer = 0; string str = n.ToString(); int[] number = new int[str.Length]; for(int i = 0; i<str.Length;i++){ number[i] = int.Parse(str[i].ToString()); } Array.Sort(number); Array.Reverse(number); str = ""; for(int i = 0;i<number.Length; i++){ str += number[i]; } answer = long.Parse(str); return answer;
주목해야하는 부분은 Array.Sort와 Array.Reverse 입니다.
Array.Sort(배열명);
배열을 오름차순으로 배치해준다.
Array.Reverse(배열명);
배열의 순서를 역순으로 바꿔준다.
OrderBy를 이용하려 했지만 그것보다는 좀 더 짧은 함수를 사용해서 순서를 만들어주었습니다.
그리고 생각하지 못한 부분은 아래 for문입니다.
타입이 string이므로 int를 더해줄 수 없다고 생각했을 뿐더러 더해준다고 한다면 값이 합쳐지는 거지 나열된다고 생각하지 못했기 때문에 저에게 있던 생각이 띠용한 느낌이였습니다.
다른 더 짧은 풀이법도 있긴했지만 제가 생각했던 것과 가장 비슷하면서도
'이걸 이렇게 사용하다니?!' 라는 충격을 받은 코드를 가져와봤습니다.
내일은 드디어 팀 프로젝트 발표날입니다.
제출은 오늘 오후 9시까지이구요!
그렇기 때문에 새로 만드는 것보다는 코드를 다듬고 꾸미는 것에 집중하게 되었는데요.
저는 아이템 리스트를 보여주는 것에 아이템 이름, 설명, 스탯 등을 좀 더 잘 볼 수 있도록 정리해주었습니다.
이 과정에서 문제가 있긴했습니다.
팀장님께서 저장기능을 만드셨는데 아이템 리스트를 정렬할 때 사용할 클래스가 제대로 저장되지 않아서 클래스 값이 null로 들어가게 되어서 생긴 문제였습니다.
저장기능을 제가 만든게 아니기때문에 왜 이런 오류가 발생했는지 알 수는 없지만 해결을 하기 위해서 튜터님께 여쭤보러 갔습니다.
제가 만들지 않았고, 튜터님도 만드신게 아니라서 정확하게 무슨 이유로 일어났는지는 모르지만 static을 사용해서 해결하게 되었습니다.
public class TextEdit { //출력 정렬하는 함수 public static int GetPrintableLength(string str); public static string PadLeftForMixedText(string str, int totalLength); public static string PadRightForMixedText(string str, int totalLength); }
일반적으로 프로젝트를 새로 만들게되면 internal class로 생성되게 됩니다.
이 class를 사용하기 위해서는 new로 새롭게 정의가 필요하게 됩니다.
하지만 static의 경우 새롭게 정의할 필요가 없습니다.
static은 프로그램이 실행하게 될 때 자동으로 생성이되어서 공간을 받습니다. 그러면 따로 정의하지 않아도 다른 클래스에서 사용이 가능하게 됩니다.
가장 대표적으로 static void Main(string[] args)가 있습니다.
프로그램이 실행되면 자동으로 시작되는 부분이지요. static이 있기 때문에 가능한 것이였습니다.
그렇다면 다른 class들은 static으로 정의하지 않는 이유는 무엇일까요?
바로 실행할 때 공간을 차지하게 되는 것이 이유입니다.
불필요하게 공간을 차지하게 되면 실행할 때 그만큼의 더 부하를 주게되기 때문에 프로그램 실행 속도가 늦어질 수도 있고 더 높은 세팅이 필요할 수도 있기 때문입니다.
그래서 필요할 때만 사용하는 class는 그대로, 계속 많은 클래스에서 사용될 class는 static을 이용해서 만들어주는 것이 좋습니다!
그렇기 때문에 저장한 파일을 불러오게 되더라도 null이 아니라 자동으로 실행되게 만들어줬기 때문에 오류는 해결되었습니다.
드디어 끝이 났습니다.
아쉬운 부분이 좀 있기는 하지만 그래도 완성했고 잘 작동한다는 것에 의의를 두는 것이 좋다고 생각합니다.
내일 발표는 팀장님께서 하시는 걸로 되어있기 때문에 두근두근한 마음으로 지켜보고 피드백 받고 다른 팀들 한 것도 보면서 좀 생각의 폭을 넓히는 것이 좋을 것 같습니다.