💣 하드코딩 했다가 혼쭐났다 ^^ 내 타이핑과 시력을 의심하고 또 의심하라
문제
AI 엔지니어인 현식이는 데이터를 분석하는 작업을 진행하고 있습니다. 데이터는 ["코드 번호(code)", "제조일(date)", "최대 수량(maximum)", "현재 수량(remain)"]으로 구성되어 있으며 현식이는 이 데이터들 중 조건을 만족하는 데이터만 뽑아서 정렬하려 합니다.
예를 들어 다음과 같이 데이터가 주어진다면
data = [[1, 20300104, 100, 80], [2, 20300804, 847, 37], [3, 20300401, 10, 8]]
이 데이터는 다음 표처럼 나타낼 수 있습니다.
주어진 데이터 중 "제조일이 20300501 이전인 물건들을 현재 수량이 적은 순서"로 정렬해야 한다면 조건에 맞게 가공된 데이터는 다음과 같습니다.
data = [[3,20300401,10,8],[1,20300104,100,80]]
정렬한 데이터들이 담긴 이차원 정수 리스트 data와 어떤 정보를 기준으로 데이터를 뽑아낼지를 의미하는 문자열 ext, 뽑아낼 정보의 기준값을 나타내는 정수 val_ext, 정보를 정렬할 기준이 되는 문자열 sort_by가 주어집니다.
data에서 ext 값이 val_ext보다 작은 데이터만 뽑은 후, sort_by에 해당하는 값을 기준으로 오름차순으로 정렬하여 return 하도록 solution 함수를 완성해 주세요. 단, 조건을 만족하는 데이터는 항상 한 개 이상 존재합니다.
입출력 예시
문제에서 명시한 (1) 조건을 만족하는 데이터들을 추출한 뒤, (2) 정렬하는 순서로 진행한다.
풀이 #1은 입력값 string형을 그대로 조건문(if-else)에서 비교하고 해당 조건에 맞는 방식으로 데이터를 처리하는 방식으로 해결하는 게 1차 계획이었다.
🧨 사건 1) "maximum" 을 "maximun" 이라 친 과거의 나...
코드 실행은 정상적으로 되지만 제출 후 채점에서 통과를 못하는.. 이론상 완벽해 보였던 내 결과물.
내 논리가 틀린 줄 알고.. 디버깅만 10번은 한 것 같다.
결국 "maximum" 이 조건식에 투입되면 정렬이 안된다는 걸 발견했다. 그리고 드디어 내 눈에 포착된 "maximun"..
풀이 #1 에 생각보다 많았던 중복코드를 더 줄여보고 싶은 욕구를 해소할 겸,
반성의 의미로 하드코딩된 문자열들도 자료구조 map으로 관리하도록 바꾸어보았다. 이렇게 탄생한 게 풀이 #2 이다.
풀이 #1
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string _sort;
bool cmp(vector<int>& v1, vector<int>& v2) {
if(_sort == "code"){
return v1[0] < v2[0];
} else if(_sort == "date"){
return v1[1] < v2[1];
} else if(_sort == "maximum"){
return v1[2] < v2[2];
} else if(_sort == "remain"){
return v1[3] < v2[3];
}
}
vector<vector<int>> extract(vector<vector<int>> data, int val_ext, int sort_index){
vector<vector<int>> result;
for(int i = 0; i < data.size(); i++)
{
if (data[i][sort_index] < val_ext)
result.push_back(data[i]);
}
return result;
}
vector<vector<int>> solution(vector<vector<int>> data, string ext, int val_ext, string sort_by) {
vector<vector<int>> answer;
//. data에서 조건 만족하는 데이터 추출 (ext < val_ext)
if(ext == "code"){
answer = extract(data, val_ext, 0);
} else if(ext == "date"){
answer = extract(data, val_ext, 1);
} else if(ext == "maximum"){
answer = extract(data, val_ext, 2);
} else if(ext == "remain"){
answer = extract(data, val_ext, 3);
}
//. sort_by 기준 오름차순 정렬
_sort = sort_by;
sort(answer.begin(), answer.end(), cmp);
return answer;
}
풀이 #2
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
map<string, int> string_idx;
int _sort;
bool cmp(vector<int>& v1, vector<int>& v2) {
return v1[_sort] < v2[_sort];
}
vector<vector<int>> extract(vector<vector<int>> data, int val_ext, int ext_index) {
vector<vector<int>> result;
for (int i = 0; i < data.size(); i++)
{
if (data[i][ext_index] < val_ext)
result.push_back(data[i]);
}
return result;
}
vector<vector<int>> solution(vector<vector<int>> data, string ext, int val_ext, string sort_by) {
vector<vector<int>> answer;
string_idx["code"] = 0;
string_idx["date"] = 1;
string_idx["maximum"] = 2;
string_idx["remain"] = 3;
//. data에서 조건 만족하는 데이터 추출 (조건 : ext < val_ext)
answer = extract(data, val_ext, string_idx[ext]);
//. sort_by 기준 오름차순 정렬
_sort = string_idx[sort_by];
sort(answer.begin(), answer.end(), cmp);
return answer;
}
'🐸 Problem Solving > Programmers' 카테고리의 다른 글
[Programmers/C++] [PCCP 기출문제] 1번 / 붕대 감기 (0) | 2024.06.24 |
---|---|
[Programmers/C++] [PCCE 기출문제] 9번 / 이웃한 칸 (0) | 2024.06.14 |
[Programmers/C++] [PCCE 기출문제] 8번 / 창고 정리 (0) | 2024.06.14 |