[백준] 2711 오타맨 고창영

차누·2024년 1월 23일
0

브론즈 2 문제이다.

문제

고창영은 맨날 오타를 낸다. 창영이가 오타를 낸 문장과 오타를 낸 위치가 주어졌을 때, 오타를 지운 문자열을 출력하는 프로그램을 작성하시오.
창영이는 오타를 반드시 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를 사용하여 특정 인덱스 값을 삭제할 수 있었다.
좀 더 다양한 방법으로 알고리즘을 푸는 연습을 해야겠다

profile
to be good programmer

0개의 댓글