문제 : 백준 31458 (https://www.acmicpc.net/problem/31458)
분류 : 문자열 구현
T개의 문자열을 입력받는다.
문자열은 공백이 없는 "!!n!!" 형태로 받아 두가지 규칙(팩토리얼, 논리반전)을 적용하여 출력한다. 정수 n 에는 0 또는 1이 들어간다. 정수 앞/뒤로 '!'가 붙을 수 있다. 각 자리에 0~30개의 !가 붙을 수 있다.
1) 수식의 개수 T를 입력받음
2) 문자열에서 정수 앞 !, 정수, 정수 뒤 !를 구분
3) 정수 뒤 !는 bool형태로 확인하여 판단
4) 정수 앞 !는 홀수/짝수개인지 판단
5) 결과 출력
#include <iostream>
#include <string>
using namespace std;
int main() {
int n, num, front, len;
bool answer, check_num, back;
string str;
cin >> n;
cin.ignore();
for (int i = 0; i < n; i++) {
check_num = false;
back = false;
front = 0;
getline(cin, str);
len = str.length();
for (int j = len ; j > 0; j--) {
if (str[j-1] == '0' || str[j-1] == '1') {
check_num = true;
num = str[j-1] - '0';
continue;
}
if (check_num == false) back = true;
else front++;
}
if (back == true) answer = 1;
else answer = num;
if (front%2 == 0) cout << answer << endl;
else cout << !answer << endl;
}
return 0;
}
1. 문자열에서의 정수
string으로 문자열을 받아 중간에 써있는 정수도 char형태라는 것을 까먹었다.
if(str[j-1] == 0 || str[j-1] == 1)
처음에는 정수 0과 1로 조건을 설정해 해당 if문을 건너뛰었다. 코드를 검토하는 과정에서 이를 깨닫고
if(str[j-1] == '0' || str[j-1] == '1')
num = str[j-1] - '0';
으로 수정하였다.
구현에만 초점을 두고 빠르게 하려고 하니 기초적인 부분에서 문제가 생긴다. 지금은 실력 상승보다느 머릿속 깊은 곳에 있는 내용을 하나씩 꺼내서 정리하는 수준이다. 앞으로 열심히 해야지..! 화이팅!