BOJ13022

늑대와 올바른 단어

문제출처

문제 해석

  • 주어진 문자열이 올바른 단어인지 판단하는 문제입니다.
  • ‘w’, ‘o’,’l’,’f’가 순서대로 n번이 나오면 올바른 단어입니다.
  • 올바른 단어가 이어져 있어도 올바른 단어입니다.

설계(15)

  • 파싱을 어떻게 할지 고민을 많이 했습니다.
  • 문제를 조금 간단하게 풀기 위하여 올바른 한개의 단어씩 잘라내었습니다.
  • wolf 단어가 각 몇개 들어있는 지 판단하기 위해 cnt배열을 선언 후, 각 문자에 들어있는 개수가 다르면 0을 return 하도록 하였습니다.
  • 문자열을 계속 쪼개 나가면서 문자열이 비워질 때까지 반복합니다.

구현(25)

코드
#include <iostream>
#include <string>
using namespace std;
string s;
string word = "wolf";

int go() {
	
	while (s.size()) {
		int idx = 0;
		int start = s.find('w');
		int end = s.find('f');
		int cnt[4] = { 0, };
		while (end <= s.length() && s[++end] == 'f');
		if (start >= end) return 0;
		for (int i = start; i < end; i++) {
			while (i <= end && s[i++] == word[idx]) {
				cnt[idx]++;
			}
			i -= 2;
			if (idx != 0 && cnt[idx] != cnt[idx - 1]) return 0;
			idx++;
		}
		s = s.substr(end);
	}
	
	return 1;
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> s;
	cout << go();
	return 0;
}
디버깅
  • 머리로는 이해했으나, while문을 돌 때 인덱스 처리가 상당히 혼란스러워서 1 by 1으로 코드를 구현하였습니다.
  • flow와 같이 w의 인덱스보다 f의 인덱스가 더 작거나 같은 경우를 생각하지 않아 런타임 에러가 발생하였습니다.
제출결과
  • 0ms

    마무리

  • 길이(<=50)가 그리 크지 않아서 문자열 파싱만 잘 하면 되는 문제였습니다. 그러나, 문자 인덱스 처리를 한번에 구현하기 어려웠습니다.