티스토리 뷰
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*;";
}
후기
항상 느끼는 생각이지만 문자열 문제는 뭔가 애매하다. 푸는방법이 잘되었는지도 모르겠고 난이도도 어중간하고.. 그래도 단골문제이니만큼 잊혀질만할 때 풀면 좋은것같다.
'Algorithm' 카테고리의 다른 글
[백준] S2 15662 톱니바퀴2 (java) (1) | 2020.12.20 |
---|---|
[백준] S2 2290 LCD Test (java) (0) | 2020.12.20 |
[백준] G3 2933 미네랄 (java) (0) | 2020.12.19 |
[백준] S2 16112 5차 전직 (java) (0) | 2020.12.18 |
[백준] S5 14467 소가 길을 건너간 이유 1 (java) (0) | 2020.12.18 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 구현
- 백트래킹
- g4
- 객체지향
- DFS
- 백준
- SWEA
- 리액트
- java
- Spring Boot
- Spring
- 우선순위큐
- map
- 다익스트라
- S2
- 자바
- 현꾸라지
- 시뮬레이션
- S3
- 코딩새내기
- BFS
- PriorityQueue
- 리액트 네이티브
- 알고리즘
- react native
- 그리디
- react
- G5
- 문자열
- laugh4mile
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함