Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바
- 타임아웃
- JPA
- 다중 서버
- 캐시 스탬피드
- BFS
- thundering herd
- java
- 이진탐색
- expired key
- 베타락
- 알고리즘
- 트라이 자료구조
- queue
- ddl-auto
- Entity Manager
- 스택
- 이분탐색
- 비관적 락
- Stack
- 슬라이스 테스트
- 예외처리
- prg패턴
- DP
- id생성
- 외부 서비스 장애
- 벌크헤드패턴
- session인증
- 낙관적 락
- 백준
Archives
- Today
- Total
Coding 01
백준[9935]번: 문자열 폭발 ( Java ) 본문
https://www.acmicpc.net/problem/9935
9935번: 문자열 폭발
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모
www.acmicpc.net
개발환경은 eclipse를 사용했습니다.
Code
정답
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String arr = br.readLine(); //문자열 받기
String bomb = br.readLine(); // 제거할 문자열 받기
for(int i=0;i<arr.length();i++)
{
char ch = arr.charAt(i); // 문자열에서 문자열 하나씩 뽑기
sb.append(ch);
if(sb.length() >= bomb.length())
{
boolean flag = true;
for(int j=0;j<bomb.length();j++) // 제거할 문자열 길이만큼 비교
{
char arrch = sb.charAt(sb.length()-bomb.length()+j);
char bombch = bomb.charAt(j);
if(arrch != bombch) // 다르다면 반복문 탈출
{
flag = !flag;
break;
}
}
if(flag)
{
sb.delete(sb.length()-bomb.length(),sb.length()); // 제거
}
}
}
if(sb.length() == 0)
{
System.out.print("FRULA");
}
else
{
System.out.print(sb.toString());
}
}
}
틀린코드
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String arr = br.readLine();
String ans = br.readLine();
while(arr.contains(ans))
{
arr = arr.replace(ans,"");
}
if(arr.length() == 0)
{
System.out.print("FRULA");
}
else
{
System.out.print(arr);
}
}
}
처음에 문자열 replace를 사용해서 이렇게 풀었는데 제출했더니 메모리 초과가 났다.
다른 방법이 필요했다.
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Deque<String> deque = new LinkedList<>();
String arr = br.readLine();
String ans = br.readLine();
deque.offer(arr);
while(deque.contains(ans))
{
String temp = deque.remove();
StringTokenizer st = new StringTokenizer(temp,ans);
String result = "";
while(st.hasMoreTokens())
{
result+= st.nextToken();
}
deque.offer(result);
}
if(deque.isEmpty())
{
System.out.print("FRULA");
}
else
{
System.out.print(deque);
}
}
}
다음으로는 이렇게 풀었었는데 Tokenizer의 ans값이 문자열 그대로 구분지어주는것이 아니라 출력이 이상하게 나왔다.
deque.offer(arr);
여기가 문제였다.
덱을 사용하는 의미가 없어 다른 방법을 생각하다가 풀지 못했다.
계속 문자열로 제거하는 방법만 생각하다가 인터넷을 보고 정답을 알았다.
그냥 문자를 하나씩 검사하는 방법이었다.
스스로 해결하지 못해서 문제를 풀었다는 느낌이 들지 않았다.
정답코드를 보면 쉽게 다들 쉽게 푸시는것 같은데 나만 못푸는 것 같아서 열심히 좀 해야겠다
'백준' 카테고리의 다른 글
백준[17299]번: 오등큰수 ( Java ) (0) | 2023.02.19 |
---|---|
백준[17298]번: 오큰수 ( Java ) (0) | 2023.02.18 |
백준 [5430]번: AC ( Java ) (0) | 2023.02.15 |
백준 [1021번]: 회전하는 큐 ( Java ) (0) | 2023.02.14 |
백준 [10866]번: 덱 ( Java ) (0) | 2023.02.13 |