https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이 1
최고차항 계수가 큰 것 순서대로 정렬을 하면 되겠다.
먼저 최고차항을 반환해 주는 메서드를 만들었고, 이 메서드로 정렬을 하면 될 텐데.. 이걸 어떻게 해야 할지 모르겠다.
풀이 2
잘 모르겠어서 llm(Gemini)에게 최고차항 계수를 기준으로 정렬하는 방법을 물어봤다.
Linq메서드를 사용하면 된다고 한다. 예시로 알려준 메서드를 가져와서 적용해 봤다.
코드 1 - 오답
using System;
using System.Text;
using System.Linq;
public class Solution {
static StringBuilder sb = new StringBuilder();
public int A(int number)
{
while(number / 10 > 0)
{
number = number / 10;
}
return number;
}
public string solution(int[] numbers)
{
// string answer = "";
numbers = numbers.OrderByDescending(number => A(number)).ToArray();
foreach(int number in numbers)
{
sb.Append(number);
}
// return answer;
return sb.ToString();
}
}
최고차항 계수가 같은 경우에는 다음 자리와 비교를 해야 하는데 이때 비교 기준이 모호한 경우가 있어 정렬이 이상하게 되어 오답처리가 된다.
풀이 3
3과 30을 비교해야 할 때 3은 다음 자리가 없다.
이때 3이 더 큰지 30이 더 큰지 판단하는 로직이 필요하다.
이렇게 하지 말고 그냥 문자열끼리 붙여서 비교하면 쉽다고 한다.
Array.Sort(numbersStr, (x, y) => (y + x).CompareTo(x + y))
이런 식으로 말이다.
코드 2 - 정답
using System;
using System.Text;
using System.Linq;
public class Solution {
public string solution(int[] numbers) {
string answer = "";
string[] numbersStr = numbers.Select(number => number.ToString()).ToArray();
Array.Sort(numbersStr, (x, y) => (y + x).CompareTo(x + y));
if(numbersStr[0] == "0")
{
return "0";
}
StringBuilder sb = new StringBuilder();
foreach(string str in numbersStr)
{
sb.Append(str);
}
return sb.ToString();
}
}
'자료구조, 코딩테스트 > 정렬(Sort)' 카테고리의 다른 글
| [코딩테스트] Programmers - 문자열 정렬하기 2 (성공) (0) | 2026.05.23 |
|---|---|
| [코딩테스트] Programmers - 문자열 내 마음대로 정렬하기 (실패) (0) | 2026.05.23 |
| [코딩테스트] Programmers - K번째수 (실패) (0) | 2026.05.02 |
| [자료구조] Radix Sort (0) | 2026.05.02 |
| [자료구조] Counting Sort (0) | 2026.05.01 |