알고리즘(BOJ)/Silver
백준 - 타이핑 25215 (다이나믹)
ch.0
2023. 3. 25. 10:39
문제 분석
직관적으로 문제에 접근하는 게 오히려 쉽게 풀렸다.
처음에는 1부터 size-1까지 해결한 후 처음과 마지막 문자열에 대한 처리를 하려고 했으나 경우의 수가 너무 많았다.
문제에 나온 것처럼 상태(◇눌린 상태인지), 현재, 다음 의 문자의 대/소문자여부를 파악하여 처리했다.
현재 소문자일 때, 소문자상태면 더 볼 것도 없이 하나의 입력만 필요하다.
현재 소문자일 때, 대문자상태면 무조건 두 개의 입력이 필요하다. 하지만 여기서 다음 문자가 소문자라면 ☆을 입력해 준 것일 테니까 대문자 상태여부는 바꿔주지 않는다
현재 대문자일 때, 대문자상태면 더 볼 것도 없이 하나의 입력만 필요하다.
현재 대문자일 때, 소문자상태면 무조건 2개의 입력이 필요하다.위에서 반대로 다음 문자가 대문자면 ☆을 입력해 준 것일 테니까 대문자 상태여부는 바꿔주지 않는다.
전체 소스
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
int[] array = new int[input.length()];
//대문자 65~90 소문자97~122
for(int i=0; i<input.length(); i++) {
int c = input.charAt(i)-0;
array[i] = c;
}
int result = 0;
boolean check = false;
for(int i=0; i<input.length(); i++) {
//소문자
if(array[i]>96) {
// 대문자였던 상태라면
if(check) {
if(i+1<input.length() && array[i+1] > 96) {
check = false;
}
result += 2;
}else {
result++;
}
//대문자
}else if(array[i]<91) {
// 소문자였던 상태라면
if(!check) {
if(i+1<input.length() && array[i+1] < 91) {
check = true;
}
result += 2;
}else {
result++;
}
}
}
System.out.println(result);
}
}
https://www.acmicpc.net/problem/25215
25215번: 타이핑
민겸이는 영어 소문자와 대문자로 이루어진 문자열을 타이핑하기로 했다. 민겸이가 사용할 수 있는 버튼은 26개의 영어 알파벳 버튼과 마름모(◆) 버튼, 별(★) 버튼이다. 각 버튼은 아래와 같이
www.acmicpc.net