Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 티스토리챌린지
- UnrealEngine5
- C++
- const
- Programmers
- Frustum
- directx
- softeer
- 1563
- RVO
- DeferredRendering
- winapi
- IFileDialog
- C
- algorithm
- UnrealEngine4
- GeeksForGeeks
- 백준
- UE5
- 줄 세우기
- DirectX11
- NRVO
- 프로그래머스
- baekjoon
- Unreal Engine5
- 언리얼엔진5
- 오블완
- 팰린드롬 만들기
- 2294
- RootMotion
Archives
- Today
- Total
Game Develop
[Algorithm] Programmers :: 큰 수 만들기 본문
https://programmers.co.kr/learn/courses/30/lessons/42883?language=cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
int maxNum(string& number, int& startIndex, int destIndex)
{
int maxNum = -100;
for (int i = startIndex; i <= destIndex; i++)
{
if (maxNum < number[i] - '0')
{
startIndex = i;
maxNum = number[i] - '0';
}
}
return maxNum;
}
string solution(string number, int k) {
string answer = "";
int spareNum = number.size() - k; // 남은 여분의 글자개수
int startIndex = 0;
int destIndex = number.size() - spareNum; // 2
while (answer.size() != number.size() - k)
{
if (startIndex >= number.size() - 2) // 끝에서 두번째랑 첫번째꺼.
{
if (spareNum == 2)
{
answer += number[number.size() - 2];
answer += number[number.size() - 1];
return answer;
}
else if(spareNum == 1)
{
int last2 = number[number.size() - 2] - '0';
int last1 = number[number.size() - 1] - '0';
answer += to_string(max(last2, last1));
return answer;
}
}
else
{
answer += to_string(maxNum(number, startIndex, destIndex));
startIndex += 1;
destIndex += 1;
spareNum--;
}
}
return answer;
}
|
cs |
나름 문제보자마자 생각나는대로 구현해본건데 제대로 작동한다.
메인로직은 else문이고, 위에 if문(startIndex >= numbers.size() -2)의 안에있는 if문,else if문은 사실 약간의 하드코딩이다.. 반복문을 진행하다보면 마지막 두개에서 spareNum이 1이거나 2라서 일단 구현하고 되는지부터 체크하기위해서 저렇게 제출했다. spareNum은 +해야하는 남은 글자개수인데, 만약 spareNum이 2개면 체크할 number의 원소도 끝에서 두개밖에 안남았기 때문에 그거 그대로 answer에 더해주면된다.
spareNum이 1인데(answer에 추가할 남은 글자개수) number의 원소가 끝에서 두개 남았다면, 그냥 둘 중 큰수를 answer에 더해주면 된다.
다른사람의 풀이를보면 간단하게 다듬은 코드가 있다. 개인적으로 제일 정석적이고 모범적인 답안같다.
큰 틀은 같다. 기본적으로 많이 어려운 문제가 아니라서 대부분 틀은 많이 비슷비슷한것같다.
개인적으로 그리디문제는 내 취향에 잘 안맞는다..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
string solution(string number, int k) {
string answer = "";
int maxIndex = 0;
int maxNum = -1;
for (int i = 0; i < number.size(); i++)
{
if (number[i] - '0' > maxNum)
{
maxNum = number[i] - '0';
maxIndex = i;
}
if (i == k)
{
answer += to_string(maxNum);
i = maxIndex;
k++;
maxNum = 0;
}
}
return answer;
}
|
cs |
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm] Programmers :: 단속카메라 (0) | 2022.05.28 |
---|---|
[Algorithm] Programmers :: 구명보트 (0) | 2022.05.27 |
[Algorithm] Programmers :: 가장 큰 수 (0) | 2022.05.26 |
[Algorithm] Programmers :: 체육복 (0) | 2022.05.24 |
[Algorithm] Programmers :: 여행경로 (0) | 2022.05.21 |