[알고리즘 문제풀이]-String

jr_necki·2022년 7월 25일
0

(1-5) 특정문자 뒤집기

(푸는중임)

🚩 내 코드

💡 푼 방식


rt lt 둘다 알파벳일때 서로 위치를 바꿀 수 있다.
만약 rt가 가르키는 곳이 알파벳이 아니라면 한칸 이동 (lt일 경우에도)
rt가 lt보다 크지 않을 때까지 반복한다.

📚 알게 된 정보

(1-8) 유효한 팰린드롬

🚩 내 코드

Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        // 대소문자 구분 없으므로 모두 대문자로 변환
        // 정규식 사용 (replaceAll만 정규식 사용가능)
        // 대문자 A-Z까지가 아니면
        str = str.toUpperCase().replaceAll("[^A-Z]","");

        String tmp = new StringBuilder(str).reverse().toString();
        if(str.equals(tmp)){
            System.out.println("YES");
        }else{
            System.out.println("NO");
        }

💡 푼 방식

오로지 알파벳만,대소문자 구분x 라는 규칙이 있으므로, 주어진 문자열을 모두 대문자로 전환했다.
replaceAll정규식을 사용해 알파벳이외의 문자는 ""이거로 처리했다.
stringBuilder로 거꾸로 해서 기존 문자열과 비교했다.

📚 알게 된 정보

  • replaceAll
    replaceAll을 사용할때 '알파벳이 아닌것'을 어떻게 표현하지? 했는데 정규식을 이용하면 됐었다.
    정규식은 따로 정리해야지.....헤헤
  • StringBuilder
    일단 StringBuilder를 쓰는 이유는 상대적으로 빠른 속도와 적은 부하이다.
    String 객체와 String객체를 더하는것은 새로운 String 객체를 생성하므로 메모리 할당과 해제가 발생한다.
    StringBuilder는 문자열을 더할 때 기존의 것에다가 더하는 방식이기 때문에 위의 장점이 있다.
    StringBuilder sb = new StringBuilder("abc");
    sb.append("def");
    System.out.print(sb.toString()); // 출력하기 위해선 string으로 해준다.
    System.out.print(sb.reverse.toString())); // 거꾸로

    (1-12) 암호

    🚩 내 코드

    for(int i=0; i<arr.length; i++){
                if(arr[i].equals("#")){
                    binary += "1";
                }else{
                    binary+="0";
                }
            }
            String ans="";
            for(int i=0; i<n; i++){
                String ascii = binary.substring(i*7,(i*7)+7);
                System.out.print((char)Integer.parseInt(ascii,2));
            }

    💡 푼 방식

    암호를 문자배열로 받고 0과1로 바꿔준다.
    (replaceAll로 하려 했지만, *<-이거에서 좀 이상해져서 일일이 바꿔줬다..)

    substring을 사용하여 7개씩 n번 나눠주고
    Integer.parseInt()로 2진수를 10진수로 바꾸어준다.
    숫자를 해당 아스키코드로 출력해준다.

    📚 알게 된 정보

  • substring(n) : 0~n-1번쨰까지 잘라준다.
  • Integer.parseInt("문자열",n) : n진법을 10진법으로 전환
  • profile
    슉슉슉

    0개의 댓글