감자는 아직 꿈을 꾼다.

[백준-java] 3613번 실버 3 java vs c++ 본문

코테적 감자/백준

[백준-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);
    }
}