Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

봄디의 개발일지

[알고리즘] 특정 문자 뒤집기 - 문자열, 투포인터 [JAVA/자바] 본문

카테고리 없음

[알고리즘] 특정 문자 뒤집기 - 문자열, 투포인터 [JAVA/자바]

bomdy 2024. 11. 3. 23:24

비슷한 문제 보러가기

2024.10.27 - [백준] - [백준 / 배열] 3273번 : 두 수의 합 - (JAVA/자바)

 

[백준 / 배열] 3273번 : 두 수의 합 - (JAVA/자바)

📝 문제백준 3273번 : 두 수의 합 💭 풀이 방법for 문을 2번 돌려서 푸는 문제구나 ! 라고 하고 풀었지만 시간 초과가 발생했습니다 ..찾아보니 이 문제는 투 포인터 를 이용해서 푸는 문제더라구

bomdy.tistory.com

📝 문제

특정 문자 뒤집기 문제

 

💭풀이 방법

이 문제는 투 포인터 를 이용해서 푸는 문제입니다. 

문자열의 맨 앞과 맨 뒤를 가리키는 정수를 하나 선언하여 특정 조건을 만족시키면 앞으로 혹은 뒤로 이동하며 문제를 푸는 방식입니다. 

 

입력이 a#b!GE*T@S 가 char[] arr 에 들어와있다고 가정했을 때,

start 는 0번을 가리키고, end 는 문자열의 제일 끝인 9번 인덱스를 가리키게 둡니다.

 

영어 알파벳만 뒤집기 때문에  인덱스가 가리키는 위치에 있는 값이 알파벳인지를 확인하고,

알파벳이 아니라면 start 위치는 한 칸 뒤로 이동, end 는 한 칸 앞으로 이동하며 알파벳인지를 확인합니다. 

 

영어 알파벳이라면 두 문자를 switch 해주면 됩니다. 

 

😊소스코드

import java.util.Scanner;

public class 특정_문자_뒤집기 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        System.out.println(solution(str));
    }

    private static String solution(String str) {
        char[] arr = str.toCharArray();
        int start = 0;
        int end = arr.length -1;
        char tmp;

        while (start < end) {
            if (!Character.isAlphabetic(arr[start])) {
                start++;
            }
            else if (!Character.isAlphabetic(arr[end])) {
                end--;
            }
            else {
                tmp = arr[start];
                arr[start] = arr[end];
                arr[end] = tmp;
                start++;
                end--;
            }
        }
        return String.valueOf(arr);
    }
}