[백준] 3568 : iSharp (JAVA)
문제
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 하는 과정들을 잘 기억해둘 것.
참고 사이트
딱히 없음
Author And Source
이 문제에 관하여([백준] 3568 : iSharp (JAVA)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yanghl98/백준-3568-iSharp-JAVA저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)