https://school.programmers.co.kr/learn/courses/30/lessons/120834
#include <string>
#include <vector>
#include <algorithm>
// #include <bits/stdc++.h>
using namespace std;
//parser 함수를 만들어서 위에 선언하고, 그 parser함수를 이용해서 solution 함수 내부에서
//수들을 나누어서 한번 string에 붙여보자.
vector<int> parser(int age){
vector<int> parsed;
int num=age;
while(num){
parsed.emplace_back(num%10);
num/=10;
}
reverse(parsed.begin(),parsed.end());
// for(auto c: parsed) cout<<c<<' ';
return parsed;
}
string solution(int age) {
string answer = "";
vector<int> v = parser(age);
for(auto c: v){
answer+=char(c+97);
}
// cout<<int('a')<<" 인트확인";
return answer;
}
처음에 int 로 주어지는 age를 string으로 바꾸어서, 각 char 별로 반복문을 돌면서 처리를 하자는 생각을 했는데, int 로 주어지는 값을 어떻게 해야 string으로 변환시킬까 하다가, stoi() 함수가 생각나서 역으로 itos()함수를 생각해서 사용해보려 하니까 해당 함수가 존재하지 않았다.
그래서 어떤식으로 해결할까 했는데, 위에 작성해놓은 방법처럼 paser 함수를 만들어서 1의자리별로 각각의 수를 파싱해서 배열에 저장하고, 해당 배열을 역순으로 reverse해서 각각의 수들을 다루는 방식을 떠올렸고 위의 형태로 작성했다.
해결하고 난뒤 다른사람의 풀이를 보니까 내가 처음에 생각한 int를 string으로 변환하는 풀이를 찾을 수 있었고, 그때 사용할 수 있는 함수로 <string> 헤더에 있는 to_string() 함수를 이용하면 된다는것을 알 수 있었다. itos() 이라는 함수가 아니라 to_string() 이라는 함수를 사용해야 했다.
해당 코드를 보자면,
#include <string>
#include <vector>
using namespace std;
string solution(int age) {
string answer = to_string(age);
for(auto& v : answer)
v += 'a'-'0';
return answer;
}
이와 같은 풀이이다. 아주 간결하게 잘 해결한 풀이라고 생각된다. to_string() 함수를 기억하고 이렇듯 잘 활용하도록 하자.
그리고 auto& v 형태로 for문을 돌아서 answer에 있던 각각의 숫자로 보여지는 char값들을 그대로
v = v+'a'-'0'; 형태의 코드를 통해서 알파벳 소문자 형태로 변환해서 그대로 answer를 출력하면 되도록 만든 코드를 통해서 더욱 간결하게 작성할 수 있는 풀이였다.
이때에 v= v+'a'-'0' 형태를 통해서, -'0' 으로 기준점을 0으로 만들어버리고, 'a'를 통해서 다시 기준점을 알파벳 숫자 체계로 올려버려서 이런 연산을 거치면 v를 기준으로 해당 연산을 통해서 전부 알파벳 a를 시작으로 하는 단계로 옮겨버릴 수 있는 풀이였다.
만약 나처럼 to_string()을 몰랐다면, parsing을 하는 형태로 문제를 해결할 수 있는데,
#include <string>
#include <vector>
using namespace std;
string solution(int age) {
string answer = "";
vector<int> tmp;
while(age > 0)
{
tmp.push_back(age % 10);
age /= 10;
}
for(int i = tmp.size() - 1; i >= 0; i--)
answer += tmp[i] + 97;
return answer;
}
다른 사람의 풀이 부분에서 본 이러한 형태처럼,
for(int i= tmp.size() -1; i>=0; i--)
answer+=tmp[i]+97;
형태로, 작성하면, reverse를 해줄 필요가 없고,
풀이를 아주 간결하게 바꿀 수 있어서 내가 접근한 형태로 푼다면 위와 같은 풀이를 작성하는것이 더 좋을것 같다.
잘 익히고 다음에는 이렇게 작성해보도록 하자.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Lv 0. 모스부호(1) - 키와 값을 엮은 자료구조가 필요하다면? unordered_map을 먼저 떠올리자. *다시 풀어보기* (0) | 2023.09.19 |
---|---|
Lv 0. 개미 군단 (0) | 2023.09.19 |
Lv 0. 순서쌍의 개수 - 처음으로 시간초과 발생한 문제. (0) | 2023.09.18 |
Lv 0. 진료순서 정하기 - sort는 algorithm 헤더에, greater<>()는 내림차순. *다시 풀어보기* (0) | 2023.09.18 |
Lv 0. 배열 자르기 || vector의 emplace_back()과 push_back()에 대하여. (0) | 2023.09.17 |