티스토리 뷰

Algorithm

[백준] S5 3568 iSharp (java)

코딩브론즈 2020. 12. 20. 01:35

www.acmicpc.net/problem/3568

 

3568번: iSharp

입력으로 주어진 변수 선언문을 문제의 조건에 맞게 변형한 뒤, 한 줄에 하나씩 출력한다. 변수형과 변수명 사이에는 공백이 하나 있어야 한다. 출력은 입력으로 주어진 변수 선언문에서 변수가

www.acmicpc.net

 

풀이

 

1) 먼저 입력값을 StringTokeniger로 자름

2) boolean형 변수를 활용해 맨처음 부분만 type 변수에 따로 저장한다.

3) 다음 토큰부터 한번 더 boolean형 변수를 활용해  특수문자가 나올때까지 끊어준다. 변수명 val 변수에 저장.

4) 이제 남은 문자열은 스택에 저장하는데 괄호부분은 반대로 넣어야하며 세미콜론은 넣지 않는다.

5) StringBuffer에 type + 스택의 내용 + 공백 + val + 세미콜론을 넣고 출력한다. 

 

 

 

주의사항

 

1) 괄호는 반대로 저장해야한다.

 

package com.baekJoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.Stack;
import java.util.StringTokenizer;

public class BJ_S5_3568_iSharp {
	static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer tokens;

	public static void main(String[] args) throws NumberFormatException, IOException {
		input = new BufferedReader(new StringReader(src));
		boolean typeIsSelected = false;
		tokens = new StringTokenizer(input.readLine());
		String type = "";
		while(tokens.hasMoreTokens()) {
			if(!typeIsSelected) {
				type = tokens.nextToken();
				typeIsSelected = true;
			}
			
			String str = tokens.nextToken();
			boolean valIsSelected = false;
			int valend = str.length()-1;
			for(int i=0; i<str.length(); i++) {
				if(!valIsSelected) {
					if(str.charAt(i)== '&' || str.charAt(i)== '*' || str.charAt(i)== '[' || str.charAt(i)== ']') {
						valend = i;
						valIsSelected = true;
					}
				}
			}
			String val = str.substring(0,valend);
			Stack<Character> stack = new Stack<>();
			for(int i=0; i<str.length(); i++) {
				if(str.charAt(i)== '&' || str.charAt(i)== '*') {
					stack.add(str.charAt(i));
				}else if(str.charAt(i)== '[') {
					stack.add(']');
				}else if(str.charAt(i)== ']') {
					stack.add('[');
				}
			}
			StringBuffer sb = new StringBuffer();
			sb.append(type);
			while(!stack.isEmpty()) {
				sb.append(stack.pop());
			}
			sb.append(" ");
			sb.append(val);
			sb.append(';');
			
			System.out.println(sb);
		}
	}

	static String src =
			"int& a*[]&, b, c*;";
}

 

 

후기

 

항상 느끼는 생각이지만 문자열 문제는 뭔가 애매하다. 푸는방법이 잘되었는지도 모르겠고 난이도도 어중간하고.. 그래도 단골문제이니만큼 잊혀질만할 때 풀면 좋은것같다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함