문제
79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로 먼저 온다.
문제는 정수 M, N(1 ≤ M ≤ N ≤ 99)이 주어지면 M 이상 N 이하의 정수를 숫자 하나씩 읽었을 때를 기준으로 사전순으로 정렬하여 출력하는 것이다.
입력
첫째 줄에 M과 N이 주어진다.
출력
M 이상 N 이하의 정수를 문제 조건에 맞게 정렬하여 한 줄에 10개씩 출력한다.
예제 입력 1 복사
8 28
예제 출력 1 복사
8 9 18 15 14 19 11 17 16 13
12 10 28 25 24 21 27 26 23 22
20
간단한 정렬 구현 문제. 풀고나서 코드 중복이 심해서 리팩토링을 진행하였다.
c++ 풀이 리팩토링 전
#include <bits/stdc++.h>
using namespace std;
int n;
int m;
vector<pair<string, int>> v;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
for (int i = n; i <= m; i++) {
if (i < 10) {
if (i == 1) {
v.push_back({"one", i});
}
if (i == 2) {
v.push_back({"two", i});
}
if (i == 3) {
v.push_back({"three", i});
}
if (i == 4) {
v.push_back({"four", i});
}
if (i == 5) {
v.push_back({"five", i});
}
if (i == 6) {
v.push_back({"six", i});
}
if (i == 7) {
v.push_back({"seven", i});
}
if (i == 8) {
v.push_back({"eight", i});
}
if (i == 9) {
v.push_back({"nine", i});
}
}
if (i >= 10) {
string iString = to_string(i);
string s;
if (iString[0] == '1') {
s += "one";
}
if (iString[0] == '2') {
s += "two";
}
if (iString[0] == '3') {
s += "three";
}
if (iString[0] == '4') {
s += "four";
}
if (iString[0] == '5') {
s += "five";
}
if (iString[0] == '6') {
s += "six";
}
if (iString[0] == '7') {
s += "seven";
}
if (iString[0] == '8') {
s += "eight";
}
if (iString[0] == '9') {
s += "nine";
}
s += " ";
if (iString[1] == '0') {
s += "zero";
}
if (iString[1] == '1') {
s += "one";
}
if (iString[1] == '2') {
s += "two";
}
if (iString[1] == '3') {
s += "three";
}
if (iString[1] == '4') {
s += "four";
}
if (iString[1] == '5') {
s += "five";
}
if (iString[1] == '6') {
s += "six";
}
if (iString[1] == '7') {
s += "seven";
}
if (iString[1] == '8') {
s += "eight";
}
if (iString[1] == '9') {
s += "nine";
}
v.push_back({s, i});
}
}
sort(v.begin(),v.end());
int cnt = 0;
for(auto x : v){
cout << x.second << " ";
cnt++;
if(cnt>=10){
cout << "\n";
cnt=0;
}
}
}
- c++ 풀이 리팩토링 후
#include <bits/stdc++.h>
using namespace std;
int n;
int m;
vector<pair<string, int>> v;
string judgeZero(char c) {
if (c == '0') {
return "zero";
}
return "";
}
string judgeOne(char c) {
if (c == '1') {
return "one";
}
return "";
}
string judgeTwo(char c) {
if (c == '2') {
return "two";
}
return "";
}
string judgeThree(char c) {
if (c == '3') {
return "three";
}
return "";
}
string judgeFour(char c) {
if (c == '4') {
return "four";
}
return "";
}
string judgeFive(char c) {
if (c == '5') {
return "five";
}
return "";
}
string judgeSix(char c) {
if (c == '6') {
return "six";
}
return "";
}
string judgeSeven(char c) {
if (c == '7') {
return "seven";
}
return "";
}
string judgeEight(char c) {
if (c == '8') {
return "eight";
}
return "";
}
string judgeNine(char c) {
if (c == '9') {
return "nine";
}
return "";
}
string judgeNumber(char c) {
string s = "";
s += judgeZero(c);
s += judgeOne(c);
s += judgeTwo(c);
s += judgeThree(c);
s += judgeFour(c);
s += judgeFive(c);
s += judgeSix(c);
s += judgeSeven(c);
s += judgeEight(c);
s += judgeNine(c);
return s;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
for (int i = n; i <= m; i++) {
if (i < 10) {
v.push_back({judgeNumber(i+'0'),i});
}
if (i >= 10) {
string iString = to_string(i);
string s;
s+= judgeNumber(iString[0]);
s += " ";
s+= judgeNumber(iString[1]);
v.push_back({s, i});
}
}
sort(v.begin(), v.end());
int cnt = 0;
for (auto x: v) {
cout << x.second << " ";
cnt++;
if (cnt >= 10) {
cout << "\n";
cnt = 0;
}
}
}
'Algorythms' 카테고리의 다른 글
백준 10819번 차이를 최대로 (1) | 2024.02.12 |
---|---|
프로그래머스 Level3 숫자 게임 c++ 풀이 (1) | 2024.02.06 |
프로그래머스 Level3 최고의 집합 c++ 풀이 (0) | 2024.02.05 |
프로그래머스 Level3 야근 지수 c++ 풀이 (1) | 2024.02.05 |
백준 11441번 합 구하기 c++ 풀이 (1) | 2024.02.05 |