728x90
반응형
2024.05.16기준 - 실버5
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 주어진 문자열에서 특정 부분 문자열의 알파벳 묶음 개수를 계산하고, 알파벳을 변경하는 문제입니다.
저의 접근 방식은 알파벳 묶음의 개수를 세는 함수와 변환을 해주는 함수 2가지를 사용해야 겠다고 생각을 했습니다.
- 알파벳 묶음 개수 계산
- 주어진 부분 문자열에서 각 알파벳이 연속해서 나타나는 묶음의 개수를 세어 주면 됩니다.
- 문자열을 순화하면서 현재 문자와 이전 문자를 비교하여 새로운 묶음이 시작되는지 확인했습니다.
- 알파벳 변경
- 주어진 부분 문자열의 각 알파벳을 ++을 하여 다음 알파벳으로 변경을 하였습니다.
- Z가 들어오는 경우에는 A로 변경되기 때문에 조건식을 사용했습니다.
코드
import java.io.*;
import java.util.*;
public class Main {
static char[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 문자열 길이
int t = Integer.parseInt(st.nextToken()); // 쿼리의 개수
arr = br.readLine().toCharArray(); // 문자열
while (t-- > 0) {
st = new StringTokenizer(br.readLine());
int c = Integer.parseInt(st.nextToken());
int l = Integer.parseInt(st.nextToken());
int r = Integer.parseInt(st.nextToken());
switch (c) {
case 1:
sb.append(check(l - 1, r - 1)).append("\n");
break;
case 2:
change(l - 1, r - 1);
break;
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
// 알파벳 묶음을 계산하는 함수
private static int check(int start, int end) {
int count = 0;
char c = ' ', now;
for (int i = start; i <= end; i++) {
now = arr[i];
if (c != now) {
c = now;
count++;
}
}
return count;
}
// 알파벳 변경 함수
private static void change(int start, int end) {
for (int i = start; i <= end; i++) {
if (arr[i] == 'Z') {
arr[i] = 'A';
} else {
arr[i]++;
}
}
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 31824번 근로장학생 (0) | 2024.05.19 |
---|---|
BAEKJOON / 백준 - JAVA 7572번 간지(干支) (0) | 2024.05.18 |
BAEKJOON / 백준 - JAVA 13567번 로봇 (0) | 2024.05.12 |
BAEKJOON / 백준 - JAVA 31712번 핑크빈 레이드 (0) | 2024.05.11 |
BAEKJOON / 백준 - JAVA 14940번 쉬운 최단거리 (0) | 2024.05.10 |