팡세영
Log sey
팡세영
전체 방문자
오늘
어제
  • 분류 전체보기 (74)
    • PS (45)
      • programmers (13)
      • 백준 (29)
    • Android (16)
    • Daily (0)
    • Kotlin (6)
    • Design Pattern (2)
    • Java (1)
    • Flutter (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 의존성 주입
  • 프로그래머스
  • CustomView
  • programmers #프로그래머스
  • binding
  • 완전탐색
  • 안드로이드
  • 코틀린
  • Kotlin
  • TestCode
  • 구현
  • 해쉬맵
  • compose
  • 이분탐색
  • 실버
  • 백준
  • flutter
  • DFS
  • java
  • 골드
  • LEVEL2
  • 하단네비게이션바
  • mvvm
  • ArcitecturePattern
  • 자바
  • programmers
  • Android
  • 정렬
  • 문자열
  • BFS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
팡세영

Log sey

[백준] Java vs C++ 3613 (Java)
PS/백준

[백준] Java vs C++ 3613 (Java)

2022. 7. 12. 19:31


https://www.acmicpc.net/problem/3613

 

3613번: Java vs C++

Java 예찬론자 김동규와 C++ 옹호가 김동혁은 서로 어떤 프로그래밍 언어가 최고인지 몇 시간동안 토론을 하곤 했다. 동규는 Java가 명확하고 에러가 적은 프로그램을 만든다고 주장했고, 동혁이는

www.acmicpc.net


[문제 설명] 

  • 문자열을 이용한 간단한 구현 문제이며 조건 처리만 잘해주면 되므로 반례만 설명 드리겠습니다

  • Cpp: 맨 뒤, 맨 앞 문자가 '_' 이면 에러, '_' 연속 두개면 에러
  • Java: 맨 앞 문자가 대문자면 에러
  • Cpp와 Java를 혼용하는 경우: 대문자와 '_'가 혼종이면 에러
  • 그 외: 소문자만 입력 될 경우 정상, 대문자 연속일 경우 정상
  •  

//c++  형식에 위배
//맨 뒤 문자가 '_' 이면 에러
pang_
Error! 

//c++  형식에 위배
//맨 앞 문자가 '_' 이면 에러
_pang
Error!

//c++  형식에 위배
//'_' 연속 두개면 에러
pang__seyoung
Error!

//Java 형식에 위배
//맨 앞 문자가 대문자면 에러
Seyoung
Error!

// Java와 Cpp 혼용 
//대문자와 '_'가 혼종이면 에러
Seyoung_Park
Error!

// 그 외의 경우
//소문자만 입력 될 경우 정상
seyoung
seyoung

// 그 외의 경우
// 대문자 연속일 경우 정상
seYOUNG
se_y_o_u_n_g


Java

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    static boolean whatIsLanguage = false;     // false: c++, true: java
    static boolean allOfLower = true;

    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder(br.readLine());

        // Java, C++ 형식에 맞지 않을 경우
        if(!(is_Cpp(sb) && is_Java(sb) && name_check(sb))){
            System.out.println("Error!");
            return;
        }

        // 모든 문자가 소문자일 경우 그대로 return
        if(allOfLower){
            System.out.println(sb.toString());
            return;
        }

        // true = java, false = Cpp
        if(whatIsLanguage) sb = javaToCpp(sb);
        else sb = cppToJava(sb);

        System.out.println(sb.toString());

    }

    public static boolean name_check(StringBuilder sb){
        int isUpperCase = 0;
        int isUnderBar = 0;

       for(int i=0; i < sb.length(); i++){
           char ch = sb.charAt(i);

           if(ch >= 'A' && ch <= 'Z') isUpperCase = 1;
           else if(ch == '_') isUnderBar = 1;
       }

       allOfLower = (isUnderBar == 1 || isUpperCase == 1) ? false : true;

        // Java와 Cpp 형식을 혼용 했을때 false return
       if((isUnderBar & isUpperCase) == 0 || allOfLower) {
           whatIsLanguage = (isUnderBar == 1) ? false : true;
           return true;
       }else return false;

    }

    public static boolean is_Cpp(StringBuilder sb){
        if(sb.charAt(sb.length()-1) == '_') return false;
        else if(sb.charAt(0) == '_') return false;
        else if(sb.indexOf("__") >= 0) return false;

        return true;
    }

    public static boolean is_Java(StringBuilder sb){
        return (sb.charAt(0) >= 'A'&& sb.charAt(0) <= 'Z') ? false : true;
    }

    public static StringBuilder javaToCpp(StringBuilder sb){
        for(int i=0; i<sb.length(); i++){
            char ch = sb.charAt(i);
            if(ch >= 'A' && ch <= 'Z'){
                sb.replace(i, i+1, String.valueOf(ch).toLowerCase());
                sb.insert(i, "_");
            }
        }
        return sb;
    }

    public static StringBuilder cppToJava(StringBuilder sb){
        for(int i=0; i<sb.length(); i++){
            if(sb.charAt(i) == '_'){
                sb.deleteCharAt(i);
                sb.replace(i+1, i+1, String.valueOf(sb.charAt(i)).toUpperCase());
                sb.deleteCharAt(i);
            }
        }
        return sb;
    }



}

 

'PS > 백준' 카테고리의 다른 글

백준 가희와 키워드 (22233) - Java  (0) 2022.07.29
백준 데스 나이트 (16948) - Java  (0) 2022.07.25
[백준] 추월 (2002) - Java  (0) 2022.07.08
[백준] Cupid (16460) - Java  (0) 2022.07.07
[백준] 노드 사이 거리 (1240) - Java, bfs  (0) 2022.07.05
    'PS/백준' 카테고리의 다른 글
    • 백준 가희와 키워드 (22233) - Java
    • 백준 데스 나이트 (16948) - Java
    • [백준] 추월 (2002) - Java
    • [백준] Cupid (16460) - Java
    팡세영
    팡세영
    Android, CS, PS

    티스토리툴바