정말 만만하게 봐서 설계 대충 하다가 정말 오래 걸렸던 문제ㅠ
처음에는 정말 길게도 풀었다.
더보기
#include <bits/stdc++.h>
using namespace std;
void tokenizerTimeformat(vector<string> & time, bool & isAm, string & str)
{
string tempStr = str;
const string delimiter = ":";
size_t pos = 0;
string tempdegit ="";
for (int i = 0; i < str.length(); ++i)
{
if(isdigit(str[i]) == 0)
{//is character not degit
if(tempdegit.length() != 0)
{
time.push_back(tempdegit);
tempdegit = "";
}
}
else
{
tempdegit += str[i];
}
}
if (tempStr[8] == 'A') isAm = true;
if (tempStr[8] == 'P') isAm = false;
}
string timeConversion(string s)
{
vector<string> time_s(0);
vector<int> time_i(0);
bool isAm = false;
tokenizerTimeformat(time_s, isAm, s);
cout<<"isAM : "<<isAm<<endl;
for(auto data : time_s)
{
time_i.push_back(stoi(data));
}
if(isAm == false)
{//isPM
time_i[0] += 12;
if (24 <= time_i[0])
{
time_i[0] -= 12;
}
}
if(isAm == true)
{
if (12 <= time_i[0])
{
time_i[0] = 0;
}
}
time_s[0] = to_string(time_i[0]);
if(time_s[0].length() < 2)
{
time_s[0] = "0" + time_s[0];
}
return time_s[0] + ":" + time_s[1] + ":" + time_s[2];
}
int main()
{
ofstream fout(getenv("OUTPUT_PATH"));
string s;
getline(cin, s);
string result = timeConversion(s);
fout << result << "\n";
fout.close();
return 0;
}
그러다가 scanf를 이렇게 사용할수도 있구나를 알게 돼서 적용하여 풀어보니까 정말 쉽게 풀렸다 =~=
규칙 있는 문자열을 입력받아 나눌 때 편하게 사용할 수 있을 것 같다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int h, m ,s;
char c;
scanf("%d:%d:%d%c",&h ,&m ,&s, &c);
if(c == 'A' && h == 12)
{
h = 0;
}
if(c == 'P')
{
if (h < 12) h += 12;
}
printf("%02d:%02d:%02d",h,m,s);
return 0;
}
'코딩 테스트 > 알고리즘 풀이' 카테고리의 다른 글
[백준 - 1715] 카드 정렬하기 (0) | 2022.07.28 |
---|---|
[백준 - 2751] 수 정렬하기2 (0) | 2022.07.27 |
[백준 - 10610] 30 (0) | 2022.07.27 |
[백준 - 2217] 로프 (0) | 2022.07.23 |
[백준 - 1541] 잃어버린 괄호 (0) | 2022.07.23 |