Post

[BOJ/백준] 32401번 : ANA는 회문이야 (Java)

📘 백준 32401번 : ANA는 회문이야


문제 바로가기


💡 문제 풀이


현재 문자가 A면 다음 A의 위치를 찾으며 그 사이 N이 몇 개인지 확인

다음 A를 찾고 N이 1개고 길이가 3 이상이면 카운트 후 현재 문자를 다음 A의 위치로 이동

인덱스의 범위 (ArrayIndexOutOfBounds)에 주의!


✅ 코드 (Java)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// https://www.acmicpc.net/problem/32401
// 현재 문자가 A면 다음 A의 위치를 찾으며 그 사이 N이 몇 개인지 확인
// 다음 A를 찾고 N이 1개고 길이가 3 이상이면 카운트 후 현재 문자를 다음 A의 위치로 이동
public class B32401_ANA는_회문이야 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine()); // 문자열 길이
		char[] s = br.readLine().toCharArray(); // 문자열
		int cnt = 0; // 유사 ANA 개수
		int now = 0; // 현재 위치
		int end = 0; // 확인할 문자열의 마지막 문자 위치
		while (now < N && end < N) { // 문자열 전체 순회
			if (s[now] != 'A') { // 현재 문자가 A가 아니면 스킵
				now++;
			} else { // 현재 문자가 A면
				int nCnt = 0; // 다음 A가지의 N의 개수
				end = now + 1; // 다음 A를 찾기 위한 인덱스
				while (end < N && s[end] != 'A') { // 다음 A가 나올 때까지 확인
					if (s[end] == 'N') { // N 개수 세기
						nCnt++;
					}
					end++;
				}
				if (end < N && nCnt == 1 && end - now >= 2) { // 유사 ANA의 조건에 맞으면 카운트
					cnt++;
				}
				now = end; // 현재 위치를 다음 A의 위치로 갱신
			}
		}
		System.out.println(cnt); // 출력
		br.close();
	}
}


💾 제출 결과


보러 가기