망나니 AWOS의 일상
article thumbnail

예제 입력 2 같은 경우 겹쳐서 보면 JOI가 1번 IOI가 3번 나온 것을 알 수 있다.

예제 입력3 도 마찬가지로 JOI가 2번 IOI가 3번 나온 것을 알 수 있다.

내가 생각한 방법은 이렇다.

String으로 문자열을 입력받고 charAt()으로 JOI와 IOI가 있는지 확인해 count를 세는 것이다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int count1=0, count2=0;

        // 배열크기를 벗어나기 때문에 -2를 해줌
        // 현재의 문자와 그 다음 첫번째 문자 두번째 문자를 비교하기 떄문에 -2를 해줌.
        for(int i=0; i<s.length()-2; i++){
            // 소스가 중복이 되기때문에 변수 b를 선언하여 중복코드를 방지
            boolean b = s.charAt(i + 1) == 'O' && s.charAt(i + 2) == 'I';
            if(s.charAt(i) == 'J'){
                if(b)
                    count1++;

            }
            if(s.charAt(i) == 'I'){
                if(b)
                    count2++;

            }
        }

        System.out.println(count1);
        System.out.println(count2);


    }
}

주석을 달아 놨다시피 s.length() - 2를 해준 이유는 JOI와 IOI가 있는지 없는지를 표현해주기 위해서는 

i<s.length(), s.length=6이라고 생각을 해보면 반복문을 돌아 i가 5가 되었을 때 

i+1 = 6, i+2 = 7이 되어 StringIndexOutOfBoundsException이 나게 된다. 배열의 크기는 6인데 배열의 크기를 넘어서.. 

오류 발생, 그래서 -2를 해줘야 오류가 나지 않는다. 

J O I J O I
0 1 2 3 4 5

 

그렇게 각각 count를 세주면 끝~

 

profile

망나니 AWOS의 일상

@AWOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!