[백준] 1431. 시리얼 번호 (C++)
Algorithm2022. 1. 23. 14:32
반응형
1431번: 시리얼 번호
첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어
www.acmicpc.net
Bubble Sort를 사용해 풀이하였다.
// 글자의 자리 수 합을 구하는 함수
int s_number(string s)
{
int num = 0;
for(int i=0; i<s.size(); i++)
{
if(48 <= s[i] && s[i] <= 57)
num += s[i] - 48;
}
return num;
}
int main()
{
int n; // 초기 입력 n
string s;
vector<vector<string>> store_s ; //문자열들을 저장하는 2차원 벡터
vector<vector<int>> store_n ; //문자열들의 자리수 합을 저장하는 2차원 벡터
for(int i=0; i<50;i++) //2차원 벡터 생성
{
vector<string> v1;
vector<int> v2;
store_s.push_back(v1);
store_n.push_back(v2);
}
cin >> n;
for(int i=0; i<n; i++)
{
cin >> s;
store_s[s.size()-1].push_back(s); // 시리얼번호 저장
store_n[s.size()-1].push_back(s_number(s));
// 시리얼 번호에 해당하는 자리수합 저장
}
for(int i=0; i<50; i++) //글자 길이가 50까지 이므로 50번 반복
// Bubble Sort로 글자수에 따른 시리얼 번호 정렬
for(int j=0; j<store_s[i].size(); j++)
{
for(int k=0; k<store_s[i].size()-j-1; k++)
{
string temp;
int tmp;
// 조건 2번에 따른 정렬
if(store_n[i][k] > store_n[i][k+1])
{
// 위치한 시리얼의 위치를 바꾼다
temp = store_s[i][k];
store_s[i][k] = store_s[i][k+1];
store_s[i][k+1] = temp;
// 위치한 시리얼의 자리수 합을 바꾼다
tmp = store_n[i][k];
store_n[i][k] = store_n[i][k+1];
store_n[i][k+1] = tmp;
}
// 조건 3번에 따른 정렬
else if(store_n[i][k] == store_n[i][k+1] && store_s[i][k] > store_s[i][k+1])
// 위치한 시리얼의 위치를 바꾼다
// 자리수 합은 같으므로 바꿀 필요는 없다
{
temp = store_s[i][k];
store_s[i][k] = store_s[i][k+1];
store_s[i][k+1] = temp;
}
}
}
// 출력
for(int i=0; i<50; i++)
for(int k=0; k< store_s[i].size(); k++)
cout << store_s[i][k] << endl;
return 0;
}
반응형
'Algorithm' 카테고리의 다른 글
[백준] 숫자놀이 C++ (19) | 2022.01.25 |
---|---|
[백준] 10814. 나이순 정렬 (C++) (5) | 2022.01.24 |
[백준] 11478. 서로 다른 부분 문자열의 개수 (C++) (1) | 2022.01.17 |
[Leetcode] Remove All Adjacent Duplicates In String (c++) (0) | 2022.01.16 |
[백준] 17215. 볼링 점수 계산 (C++) (re) (2) | 2022.01.16 |
댓글()