멍두의 개발새발

[백준] IOIOI in Java 본문

Algorithm/BOJ

[백준] IOIOI in Java

멍두 2024. 10. 16. 15:32
반응형

📍 문제

https://www.acmicpc.net/problem/5525

 

I + OI이 n번 반복되는 문자열의 수를 찾으면 된다

이때 주의할 점은 IOI을 찾을 때 IOIOI 은 1개가 아니라 IOIOI IOIOI 해서 2개이다

 

📍 코드 설명

처음에 나는 i 이면 매번 뒤에 검사를 시작한다고 생각했는데 이러면 안된다.

 

시간초과가 나지 않기 위해선 최대한 내가 센 ioi를 기억하고 다시 활용해야 한다

그렇다고 막 dp문제처럼 풀어야하는건 아니고 그냥 내가 센걸 이용해야만 시간초과가 나지 않는다는 것만 기억하면 된다.

 

1. i이면 검사를 시작

2. oi이 몇번있는지 카운트

3. 내가 원하는 개수만큼 잇다

4. answer + 1 추가

5. 만약 oi이 아니다 -> 다시 1번 부터 시작

 

이런 문자열 가지고 노는 문제에서 가장 주의할 점은 Index 문제이다 꼮꼬꼮꼮꼮 경계값들 테스트해보고 

특히 while문 돌 때 절대 안나갈 것 같아도 내 뇌를 믿지말고 명시적으로 앞에 넣어주는 게 좋다

 

📍 코드

✔️ 코드

더보기
public class Main {

	public static void main(String...args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		int sLength = Integer.parseInt(br.readLine());
		char[] sArr = br.readLine().toCharArray();
	
		int answer = 0;
		for(int i = 0; i < sArr.length - 2; i++) {
			int ioiCnt = 0;
			if(sArr[i] == 'O') {
				continue;
			} else {
				while(i + 2 < sArr.length && sArr[i + 1] == 'O' && sArr[i + 2] == 'I') {
					ioiCnt++;
					if(ioiCnt == n) {
						ioiCnt--;
						answer++;
					}
					i+=2;
				}
			}
		}

		System.out.println(answer);		
	}
}

 

📍 틀린이유

처음에는 dp + 재귀로 풀었는데 시간초과가 자꾸 났다

재귀까지는 좀 주접이었음..머쓱ㅠ

문자열을 좀 더 많이 풀어봐야할듯

 

📍 기억할 것

인덱스 주의해!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

반응형

'Algorithm > BOJ' 카테고리의 다른 글

[백준] 계단오르기 in Java  (0) 2024.10.31
[백준] solved.ac (in Java)  (0) 2024.10.18
[백준] 나이순 정렬 in Java  (0) 2024.07.30
[백준] 1,2,3 더하기 in Java  (3) 2024.07.14
[백준] 2xn 타일링 in Java  (1) 2024.07.13