자료구조&알고리즘/백준

[C++] 백준 5586번 - JOI와 IOI

celinayk 2023. 3. 7. 14:45
반응형

문제

입력으로 주어지는 문자열에서 연속으로 3개의 문자가 JOI 또는 IOI인 곳이 각각 몇 개 있는지 구하는 프로그램을 작성하시오. 문자열은 알파벳 대문자로만 이루어져 있다. 예를 들어, 아래와 같이 "JOIOIOI"에는 JOI가 1개, IOI가 2개 있다.

입력

첫째 줄에 알파벳 10000자 이내의 문자열이 주어진다. 

출력

첫째 줄에 문자열에 포함되어 있는 JOI의 개수, 둘째 줄에 IOI의 개수를 출력한다.

접근

int main() {

    string str;
    cin >> str;
    int jcnt = 0;
    int icnt = 0;

    for (int i = 0; i < str.size(); i++) {
        if (str.find("JOI")) {
            jcnt++;
        }
        if (str.find("IOI")) {
            jcnt++;
        }
    }
    printf("%d\n", jcnt);
    printf("%d\n", icnt);

    return 0;
}

처음에는 string멤버 함수를 써서 풀었는데 틀렸다 

코드

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> 
#include <algorithm>
#include <string>
#include <vector>
#include <math.h>
using namespace std;


int main() {

    string str;
    cin >> str;
    int jcnt = 0;
    int icnt = 0;

    for (int i = 0; i < str.size(); i++) {
        if (str[i] == 'J' && str[i+1]=='O'&&str[i+2]=='I'){
            jcnt++;
        }
        if (str[i] == 'I' && str[i + 1] == 'O' && str[i + 2] == 'I') {
            icnt++;
        }
       
    }

    printf("%d\n", jcnt);
    printf("%d\n", icnt);

    return 0;
}

리뷰

그래서 간단하게 생각을했다.

J를 찾고 J바로뒤에 O가 오고 O바로 뒤에 I가 오면 횟수를 카운팅해줬다

어렵지 않게 풀 수 있었다!!

 

출처 

5586번: JOI와 IOI (acmicpc.net)

 

5586번: JOI와 IOI

입력으로 주어지는 문자열에서 연속으로 3개의 문자가 JOI 또는 IOI인 곳이 각각 몇 개 있는지 구하는 프로그램을 작성하시오. 문자열은 알파벳 대문자로만 이루어져 있다. 예를 들어, 아래와 같

www.acmicpc.net

 

댓글수2