[백준] 3568 : iSharp (JAVA)

·2021년 7월 2일
0

Algorithm

목록 보기
8/60

문제

BOJ 3568 : iSharp - https://www.acmicpc.net/problem/3568

풀이

우선 공통 변수형과 개별 변수형을 분리한다. 먼저 ,;를 지워준 뒤, 공백으로 구분되어 있기 때문에 split() 함수를 이용하여 String 배열을 만든다. String[] str 이라고 하면, str[0]은 공통 변수형, 나머지는 개별 변수형이다.

뒤집을 때는, 변수명은 그대로 두고 변수형만 뒤집어야 한다. 개별 변수형의 맨 뒤 문자부터 확인한다.

  • &*일 경우 그대로 result 문자열에 더해준다.
  • ]일 경우 그냥 뒤집으면 ][가 되기 때문에 result 문자열에 []을 더해주고, 인덱스를 하나 더 뺀다.
  • 알파벳일 경우 변수명이기 때문에 그대로 result에 더해준다.

뒤집으면서 변수형과 변수명을 구분하기 위해 #문자를 추가했다. result 문자열은 변수형#변수명 형태로 return된다.

최종적으로, 공통 변수형+변수형+변수명에 공백과 세미콜론을 잘 조합해서 출력한다.

코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String origin = br.readLine().replace(",","").replace(";","");
        String[] str = origin.split(" ");

        for (int i = 1; i < str.length; i++) {
            String[] variable = reverseType(str[i]).split("#");
            System.out.println(str[0]+variable[0]+" "+variable[1]+";");
        }
    }

    public static String reverseType(String str){
        char[] origin = str.toCharArray();
        String result = "";

        for (int i = str.length()-1; i >= 0; i--) {
            if(origin[i]!=']'){
                if(origin[i]=='*' || origin[i]=='&'){
                    result += origin[i];
                }else{ 
                // 알파벳일 경우 변수명이기 때문에 reverse 하지 않음. 
                //'#'문자를 이용하여 type과 변수명을 구분
                    result += "#";
                    for(int j=0; j <= i; j++){
                        result += origin[j];
                    }
                    break;
                }
            }else{
                result += "[]";
                i--;
            }
        }
        return result;
    }
}

정리

✔ 알고리즘 분류 - 문자열, 파싱
✔ 난이도 - ⚪ Silver 4

🤦‍♀️ 오늘의 메모

  • 문자열을 가지고 이리저리 조작하는 문자열 관련 문제는 문제 조건을 잘 이해해야한다.
  • java에서의 substring(), split(), remove() 등의 문자열 조작 함수들과, reverse 하는 과정들을 잘 기억해둘 것.

참고 사이트

딱히 없음

profile
당근먹고 자라나는 개발자

0개의 댓글