반응형
리뷰
https://www.acmicpc.net/problem/16496
백준에 존재하는 플레티넘 문제와 유사한 난이도인데 프로그래머스에선 L2난이도에 있다.
전역 변수
없음
함수
1. cmp
bool cmp(string a, string b)
정렬을 할때 사용할 문자열을 비교하여 순서를 바꿀지 여부를 체크하는 함수
- numbers의 원소는 0 이상 1,000 이하이므로 매개변수로 주어진 문자열의 길이가 4가 넘을때까지 더해준다.
- 만약 이미 4자릿수로 들어온 상태(1000)이라면 while문이 실행되지 않는다.
- 두 문자열을 비교하여 a가 더 크다면 순서를 바꾸고, b가 더 크거나 같다면 바꾸지않는다.
문제풀이
- 정수 벡터 numbers을 solution함수의 매개변수로 입력 받는다.
- 문자열 벡터 answer을 초기화 해주고, numbers의 각 요소를 문자열로 변환하여 answer벡터에 추가해 준다.
- answer벡터를 정렬해 준다. 이때 비교 함수는 위에서 정의한 cmp함수를 사용해 준다.
- 문자열 ans를 빈 문자열 형태로 초기화 하고 answer벡터에 있는 문자열을 ans에 더해준다.
- ans의 첫번째 인자가 0이 아니라면 ans를, 0이라면 0을 문자열로 출력해 준다.
참고 사항
- ans의 첫번째 인자가 0일 경우 정답은 0인 상태이다.
- 하지만 문자열 형식으로 출력시에는 "0000000"과 같은 형태로 출력될 수 있다.
- 해당 엣지 케이스를 막고자 ans의 첫번째 인자를 확인해 주어야 한다.
정답 코드
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
bool cmp(string a, string b) {
while ((int)a.size() < 4) a += a;
while ((int)b.size() < 4) b += b;
return a > b;
}
string solution(vector<int> numbers) {
vector<string> answer;
for (int i:numbers) answer.push_back(to_string(i));
sort(answer.begin(), answer.end(), cmp);
string ans = "";
for (const string& s:answer) ans += s;
if (ans[0] == '0') return "0";
return ans;
}
728x90
반응형
'알고리즘 공부 > C++' 카테고리의 다른 글
[G5] 백준 1593번 문자 해독 C++ 슬라이딩 윈도우, 구현, 문자열 (0) | 2024.10.19 |
---|---|
[L2] 프로그래머스 H-index C++ 완전 탐색, 브루트포스 알고리즘, DAT (0) | 2024.10.19 |
[P3] 백준 14288번 회사 문화 4 C++ 세그먼트 트리, 느리게 갱신되는 세그먼트 트리, 오일러 경로 테크닉 (2) | 2024.10.18 |
[P3] 백준 14287번 회사 문화 3 C++ 세그먼트 트리, 오일러 경로 테크닉 (1) | 2024.10.17 |
[G5] 백준 9251번 LCS C++ 다이나믹 프로그래밍 (0) | 2024.10.17 |