mang_dev
맹꽁거리는 개발자
mang_dev
전체 방문자
오늘
어제
  • 분류 전체보기 (185)
    • Frontend (2)
      • Next.js (1)
    • Backend (3)
      • GraphQL (2)
    • Book (1)
      • 기타 (1)
    • Old (177)
      • 알고리즘 퍼즐 (1)
      • 백준 (131)
      • 프로그래머스 (0)
      • Codility (15)
      • LeetCode (7)
      • Codewars (1)
      • Codeforces (0)
      • Django (6)
      • React (2)
      • Naver Map Api (3)
      • Web UI (4)
      • Introduction to Cloud (2)
hELLO · Designed By 정상우.
mang_dev

맹꽁거리는 개발자

백준 5525번 IOIOI // C++
Old/백준

백준 5525번 IOIOI // C++

2020. 3. 3. 20:15

문제

 

N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다.

  • P1 IOI
  • P2 IOIOI
  • P3 IOIOIOI
  • PN IOIOI...OI (O가 N개)

I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 군데 포함되어 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. 둘째 줄에는 S의 길이 M이 주어지며, 셋째 줄에 S가 주어진다. (1 ≤ N ≤ 1,000,000, 2N+1 ≤ M ≤ 1,000,000)

출력

S에 PN이 몇 군데 포함되어 있는지 출력한다.

 


 

풀이

 

처음엔 find 함수를 써서 해당 문자열이 몇 번 나오는지 세려고 했는데 시간 초과가 발생했다.

 

따라서 IOI가 연속해서 나오는 횟수를 각각 세주면서, 패턴에 맞게 나온다면 결과 값에 1씩 더해주었다.

 


 

코드

더보기
#include <iostream>
#include <string>

using namespace std;
int N, M;

int main() {
	cin >> N >> M;

	string input;
	int count = 0;
	int res = 0;

	cin >> input;
	
	for (int i = 1; i < input.length() - 1; i++) {
		if (input[i - 1] == 'I' && input[i] == 'O' && input[i + 1] == 'I') {
			while (input[i-1] == 'I' && input[i] == 'O' && input[i + 1] == 'I') {
				count++;
				if (count == N) {
					count--;
					res++;
				}
				i += 2;
			}
		}
		count = 0;
	}

	cout << res;

	return 0;
}
저작자표시 (새창열림)

'Old > 백준' 카테고리의 다른 글

백준 7662번 이중 우선순위 큐 // C++  (0) 2020.03.03
백준 1074번 Z // C++  (0) 2020.03.03
백준 1931번 회의실 배정 // C++  (0) 2020.03.03
백준 1780번 종이의 개수 // C++  (0) 2020.03.03
백준 1676번 팩토리얼 0의 개수 // C++  (0) 2020.03.03
    'Old/백준' 카테고리의 다른 글
    • 백준 7662번 이중 우선순위 큐 // C++
    • 백준 1074번 Z // C++
    • 백준 1931번 회의실 배정 // C++
    • 백준 1780번 종이의 개수 // C++
    mang_dev
    mang_dev

    티스토리툴바