코테적 감자/백준
[백준-java] 3613번 실버 3 java vs c++
dreaming-potato
2024. 11. 17. 00:42
String 문제
예외상황만 잘 처리하면 되는 문제다.
https://www.acmicpc.net/problem/3613
내 풀이
StringBuilder의 사용법을 익힐수 있는 좋은 문제다.
deleteCharAt() -> 해당 인덱스 문자 삭제
insert() -> 해당 인덱스 앞에 문자 삽입
indexOf() -> 포함 되있으면 해당 시작 인덱스 반환
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder(br.readLine());
boolean java = false ;
boolean c = false;
// java 인지 c 인지 확인
for (int i = 0; i < sb.length();i++) {
if (sb.charAt(i) >= 'A' && sb.charAt(i) <= 'Z') java = true;
if (sb.charAt(i) =='_') c = true;
}
// 둘다 혼합일 경우
if (java && c) {
System.out.println("Error!");
return;
}
// java : 시작이 대문자 일 경우
if (sb.charAt(0) >= 'A' && sb.charAt(0) <= 'Z') {
System.out.println("Error!");
return ;
}
// c : _가 맨앞이나 맨뒤에 있을 경우, __가 두개 포함되어있을 경우
if (sb.charAt(0) == '_' || sb.charAt(sb.length()-1) == '_'
|| sb.indexOf("__") > 0) {
System.out.println("Error!");
return ;
}
// java to c
if (java) {
for (int i = 0; i < sb.length(); i ++) {
if (sb.charAt(i) >= 'A' && sb.charAt(i) <= 'Z') {
sb.replace(i, i+1, String.valueOf(sb.charAt(i)).toLowerCase());
sb.insert(i, "_");
}
}
}
// c to java
if (c) {
for (int i = 0; i < sb.length(); i ++) {
if (sb.charAt(i) == '_') {
sb.deleteCharAt(i);
sb.replace(i, i+1, String.valueOf(sb.charAt(i)).toUpperCase());
}
}
}
System.out.println(sb);
}
}