[백준]1238번 단축키 지정

allnight5·2023년 9월 20일
0

백준

목록 보기
6/7

문제링크

생각보다.. 신경을 써야하는게 많은 문제였다.

일단.. 공백이 들어가면 안된다는 것을 신경쓰지 않아 공백이 특수문자로 처리되었다.

대소문자 구분의 경우 toLowerCase()로 문자열 전체를 하긴했는데.. 그냥 isContains로 확인할때만 바꾸는것도 좋은데 확인을 여러번 하면 여러번 변환하는것이 더 오래걸리니 처음부터 전체를 통합해서 바꿨다.

변환할때가 좀 오래걸렸는데
String으로 하려니까 A와 같이 처음이면서 끝일경우 변환하는데 조건문을 많이쓴다.

StringBuilder를 이용하여 처리했다. 문자열이 추가되거나 여러번 바뀐다면 유지한상태로 추가 변경이 가능한 StringBuilder 가 좋다고 본는데

매번 추가하고 삭제되어야할경우는 String을 이용하여 조건문을 넣어서 처리하는것이 좋을 수 있다는 생각도 해본다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Set;
import java.util.HashSet;

public class Main
{
    static Set<Character> set;
	public static void main(String[] args) throws IOException {
	    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	    set = new HashSet<>(); 
	    int endPoint = Integer.parseInt(br.readLine());
	    for(int i=0; i<endPoint;i++){
	        String str = br.readLine();
	        int strLength = str.length();
	        String strTemp = str.toLowerCase(); 
	        int index = indexAlpabet(strTemp, strLength);
	        if(index == -1){
	            index = addNewKey(strTemp, strLength);
	        }
            if (index != -1) {
                System.out.println(replaceCharacter(str, index)); 
            }else{
	            System.out.println(str);
	        }
	    }
	    br.close();
	}
	
	public static int indexAlpabet(String str, int endPoint){
	    int point =0;
        if(isContains(str, point)){ 
            return point;
        }
	    for(int i=1; i<endPoint;i++){
	        if(str.charAt(i) == ' '){
                if(isContains(str, i+1)){ 
                    return i+1;
                }
	        }
	    }
	    return -1;
	}
	
	public static int addNewKey(String str, int endPoint){
	    for(int i=0; i<endPoint;i++){
	        if(isContains(str, i)){ 
	            return i;
	        }
	    }
	    return -1;
	}
	
	public static boolean isContains(String str, int index){
        if(str.charAt(index) == ' '){
            return false;
        }
	    if(!set.contains(str.charAt(index))){
            set.add(str.charAt(index));
            return true;
        }
        return false;
	}
	
    public static String replaceCharacter(String str, int index) {
        if (index >= 0 && index < str.length()) {
            StringBuilder builder = new StringBuilder(str); 
            builder.replace(index, index + 1, "[" + str.charAt(index) + "]");
            return builder.toString();
        }
        return str;
    } 
}
profile
공부기록하기

0개의 댓글