고창영은 맨날 오타를 낸다. 창영이가 오타를 낸 문장과 오타를 낸 위치가 주어졌을 때, 오타를 지운 문자열을 출력하는 프로그램을 작성하시오.
창영이는 오타를 반드시 1개만 낸다.
첫째 줄에 테스트 케이스의 개수 T(1<=T<=1,000)가 주어진다. 각 테스트 케이스는 한 줄로 구성되어 있다. 첫 숫자는 창영이가 오타를 낸 위치이고, 두 번째 문자열은 창영이가 친 문자열이다. 문자열의 가장 첫 문자는 1번째 문자이고, 문자열의 길이는 80을 넘지 않고, 대문자로만 이루어져 있다. 오타를 낸 위치는 문자열 길이보다 작거나 같다.
각 테스트 케이스에 대해 오타를 지운 문자열을 출력한다.
첫번째 시도
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;
//stack 활용
public class bj_2711 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int T = Integer.parseInt(sc.nextLine());
ArrayList<String> arr_str = new ArrayList<String>();
for(int i = 0; i < T; i++) {
int num = sc.nextInt();
String str = sc.next();
arr_str.add(str);
for(int j = 0; j < arr_str.size(); j++) {
if(num == arr_str.get(j).indexOf(j)) {
//해당 위치값 삭제
arr_str.remove(arr_str.get(num));
}
}
}
for(String str : arr_str) {
System.out.println(str);
}
}
}
처음엔 Arraylist로 문자열을 탐색하여 입력받은 인덱스와 같으면 문자열의 해당 인덱스값을 삭제할려고 했다 하지만 특정 위치값까지는 가지않아서 포기하고 다른 방법을 찾았다
시도 2
public class bj_2711 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int i = 0; i < T; i++) {
int num = sc.nextInt();
String str = sc.next();
System.out.println(new StringBuffer(str).deleteCharAt(num -1));
}
}
}
이런 간단한 문제를 어렵게 생각했나 싶었다... StringBuffer를 사용하여 특정 인덱스 값을 삭제할 수 있었다.
좀 더 다양한 방법으로 알고리즘을 푸는 연습을 해야겠다