No-ah98
Noah
No-ah98
전체 방문자
오늘
어제
  • 분류 전체보기 (40)
    • CS (7)
      • Java (7)
    • shell (1)
    • 개발 실수 (1)
    • 웹 (1)
    • Git (1)
    • 부트캠프 (1)
    • 링크 (0)
    • 오류 (0)
    • 일정 (0)
    • 객체지향 (4)
    • CodingTest (6)
    • TIL (2)
    • JPA (7)
    • JAVA (0)
    • 기타 (0)
    • Spring (5)
    • 알고리즘 (1)
      • 백준 (1)
      • 프로그래머스 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • @RequestBody@ModelAttribute 차이
  • VO
  • 엔티티 매핑
  • 연관관계
  • 멋쟁이사자처럼
  • 팰린드롬
  • 양방향 연관관계
  • 캡슐화
  • Javascript 공백 체크
  • 프로그래머스
  • @Controller
  • Entity
  • JPA
  • @RequestBody
  • @PathVariable vs @RequestParam
  • 2xn타일링
  • @PathVariable vs @RequestParam 차이
  • Git 정리
  • 중복문자제거
  • bash shell 기본 명령어
  • 타일링
  • 해시
  • 대댓글
  • 중복제거
  • 깃 정리
  • JPA데이터셋팅
  • 11726
  • @RequestBody vs @ModelAttribute
  • 문장 뒤집기
  • 문자 뒤집기
  • DTOvsVO
  • 멋사 백엔드
  • 연관관계 편의 메서드 필요성
  • form 공백 체크
  • 백준
  • @RequestParam
  • 영속성 관리
  • 연관관계 편의 메서드
  • 문자열
  • @Controller vs @RestController
  • 객체지향
  • 계층형 댓글
  • 멋쟁이사자처럼 백엔드 스쿨
  • 백엔드 스쿨
  • @PathVariable
  • @RestController
  • 데이터 셋팅
  • @ModelAttribute
  • spring data jpa
  • 연관관계 매핑

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
No-ah98

Noah

특정 문자 뒤집기 with Java
CodingTest

특정 문자 뒤집기 with Java

2022. 3. 29. 17:07

이전에 작성했던 문장 뒤집기를 응용하여 특정 문자 뒤집기에 대해 방법 2가지를 포스팅 하려고 한다.


🗝️)두 방법의 핵심은 특수 문자 판별이다.

이를 위해 Charter.isLetter() 메소드를 사용하여 현재 문자가 특수 문자인지를 판별하였다.


첫번째 방법

  • 문자열에서 알파벳만 따로 저장해서 reverse를 하고
  • 특수 문자 사이에다가 삽입하는 형태로 코드를 작성하였다.

        String str = "a#b!GE*T@S";
        StringBuilder s = new StringBuilder(); // reverse용
        StringBuilder result = new StringBuilder(); // 결과

        for(char ch  : str.toCharArray())
        {
            //대소문자 or 대문자
            if(Character.isLetter(ch)){
                s.append(String.valueOf(ch));
            }
        }
        s = s.reverse(); // 문자 뒤집기
        int i = 0; // 인덱스

        for(char ch : str.toCharArray())
        {
            if(Character.isLetter(ch)){
                result.append(String.valueOf(s.charAt(i++)));
            }
            else{
                result.append(String.valueOf(ch));
            }

        }

        System.out.println(result.toString());

 


두번째 방법

  • 시작 포인트(lt), 끝 포인트(rt)를 이용

        String str = "a#b!GE*T@S";
        int lt = 0;
        int rt = str.length()-1;
        char[] arr = str.toCharArray();

        while(lt < rt)
        {
            char ltChar = arr[lt];
            char rtChar = arr[rt];

            if(!Character.isLetter(ltChar))
                lt++;
            else if(!Character.isLetter(rtChar))
                rt--;
            else  // lt, rt 둘다 특수문자가 아닌경우 즉, 알파벳인 경우 
            {
                char temp = arr[lt];
                arr[lt] = arr[rt];
                arr[rt] = temp;
                lt++;
                rt--;
            }
        }
        String s = String.valueOf(arr);
        System.out.println(s);

✏️마치며..

이전에는 첫번째 방법을 사용할 때 문자열 연산을 String으로 했을 텐데,

이번에는 StringBuilder를 통해 메모리를 절약하는 방법을 사용했다. 뭔가 불편하기는 한데.. 점점 습관을 들여야 겠다😪

 

'CodingTest' 카테고리의 다른 글

팰린드롬(회문) with JAVA  (0) 2022.03.30
중복문자제거 with Java  (0) 2022.03.30
해시의 필요성  (0) 2022.03.25
문장 뒤집기 with Java  (0) 2022.03.25
대소문자 변환 with Java  (0) 2022.03.24
    'CodingTest' 카테고리의 다른 글
    • 팰린드롬(회문) with JAVA
    • 중복문자제거 with Java
    • 해시의 필요성
    • 문장 뒤집기 with Java
    No-ah98
    No-ah98

    티스토리툴바