2020. 9. 11. 23:59ㆍ[C#] 코딩테스트 문제풀이
프로그래머스 문제
문제 설명
어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.
예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.
문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.
제한 조건
- number는 1자리 이상, 1,000,000자리 이하인 숫자입니다.
- k는 1 이상 number의 자릿수 미만인 자연수입니다.
입출력 예
number k return
1924 | 2 | 94 |
1231234 | 3 | 3234 |
4177252841 | 4 | 775841 |
내 풀이
using System;
using System.Collections.Generic;
public class Solution {
public string solution(string number, int k) {
int numSize = number.Length - k;
List<int> temp = new List<int>(numSize);
int start = 0;
for(int i=0; i<numSize; i++)
{
char maxNum = number[start];
int maxIdx = start;
for(int j=start; j<=k+i; j++)
{
if(maxNum < number[j])
{
maxNum = number[j];
maxIdx = j;
}
}
start = maxIdx + 1;
temp.Add((int)Char.GetNumericValue(maxNum));
}
string answer = string.Join("",temp);
return answer;
}
}
느낀점: 많은 시행착오가 있었다. 반목문을 진행시킬 정확한 조건을 찾는 것 부터 어려웠으며
처음에는 반복문을 함수로 돌려서 조건에 부합할때 까지 돌려주려하다가 이중 반목문 안에 빈 String 변수를 두고 채워나간 후
리턴하면 되겠다 싶어 그 방식으로 진행하였다. 하지만 테스트 케이스 9번,10번에서 런타임 오류가 발생하였고
나는 조금이라도 수행 시간을 줄여주기 위해 List를 두고 이중 반복문 을 돌려 조건에 부합할때 그 수를 바로 List에 Add해주었다.
그렇게 진행하니 모든 테스트케이스를 만족시킬 수 있었다.
'[C#] 코딩테스트 문제풀이' 카테고리의 다른 글
[C#] 삼각 달팽이(수열 규칙) (0) | 2020.10.09 |
---|---|
[C#]가장 큰수(정렬) (0) | 2020.09.14 |
[C#] 소수 찾기 (완전 탐색) (0) | 2020.09.11 |
[C#] 팩토리얼 함수 , 소수 찾기 함수 (0) | 2020.09.11 |
[C#] H-Index (정렬) (0) | 2020.09.10 |