1개의 댓글이 있습니다.
-
-
riceluxs1t -
'섞여있으면 큰 수부터 정렬한 것과 작은 수부터 정렬한 것을'
이부분에 대한 로직을 점검해야 할 것 같습니다.
11년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
'섞여있으면 큰 수부터 정렬한 것과 작은 수부터 정렬한 것을'
이부분에 대한 로직을 점검해야 할 것 같습니다.
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
porcosedol
[[problem:LUCKYNUM]]
안녕하세요. 몇달째 LUCKYNUM 문제에 막혀 있습니다.
구현한 방식은 lucky number와 같으면 그대로 출력하고
모두 lucky number보다 작으면 그대로 큰 수부터 정렬
모두 lucky number보다 크면 그대로 작은 수부터 정렬
섞여있으면 큰 수부터 정렬한 것과 작은 수부터 정렬한 것을
lucky number와 차이를 비교했습니다.
이렇게 푸는 것이 맞는 것 같고 생각나는 테스트 케이스도 많지 않은데
도무지 어떤 케이스에 오답이 발생하는지 못 찾고 있습니다. ㅠㅠ
~~~ c++
#include
#include
#include
#include
using namespace std;
vector make_dist(const string& src_string) { dist(10, 0);
vector
for (auto c : src_string) {
int i = c - '0';
dist.at(i)++;
}
return dist;
}
string make_up_number(vector dist, int nearest, int lucky_id) {
string up_string;
if (nearest >= 0) {
while (dist.at(lucky_id) > 0) {
dist.at(lucky_id)--;
up_string.push_back(char(lucky_id + '0'));
}
while (dist.at(nearest) > 0) {
dist.at(nearest)--;
up_string.push_back(char(nearest + '0'));
}
}
}
string make_low_number(vector dist, int nearest, int lucky_id) {
string down_string;
if (nearest < dist.size()) {
while (dist.at(lucky_id) > 0) {
dist.at(lucky_id)--;
down_string.push_back(char(lucky_id + '0'));
}
while (dist.at(nearest) > 0) {
dist.at(nearest)--;
down_string.push_back(char(nearest + '0'));
}
}
}
string find_near_lucky_num(string& _1st, string& _2nd, int lucky_num) {
int bNum = 0;
int sNum = 0;
int kNum = 0;
for (int i = 0; i < _1st.size(); i++) {
bNum = bNum * 10 + (int)(_1st.at(i) - '0');
sNum = sNum * 10 + (int)(_2nd.at(i) - '0');
kNum = kNum * 10 + lucky_num;
if ((bNum - kNum) < (kNum - sNum)) {
return _1st;
}
else if ((bNum - kNum) > (kNum - sNum)) {
return _2nd;
}
}
return _1st;
}
int main() dist = make_dist(src_string);
{
int test_num;
cin >> test_num;
while (test_num--) {
string src_string;
int lucky_id;
cin >> src_string >> lucky_id;
vector
int nearest_upper = -1;
for (int i = lucky_id + 1; i < 10; i++) {
if (dist.at(i)) {
nearest_upper = i;
break;
}
}
int nearest_lower = 10;
for (int i = lucky_id - 1; i >= 0; i--) {
if (dist.at(i)) {
nearest_lower = i;
break;
}
}
}
11년 전