99클럽 코테스터디 6기 03일차 TIL

glory_young·2025년 4월 2일

문제접근

문제 : 백준 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';
으로 수정하였다.


오늘의 회고

구현에만 초점을 두고 빠르게 하려고 하니 기초적인 부분에서 문제가 생긴다. 지금은 실력 상승보다느 머릿속 깊은 곳에 있는 내용을 하나씩 꺼내서 정리하는 수준이다. 앞으로 열심히 해야지..! 화이팅!

0개의 댓글