기초코딩테스트 - String 특정문자뒤집기

고장난 고양이·2022년 3월 26일
0

codingtest-java

목록 보기
8/21

문제

설명

영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,

특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.

입력

첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.

출력

첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.

예시 입력 1

a#b!GE*T@S

예시 출력 1

S#T!EG*b@a

코드

import java.util.*;
import java.util.stream.Collectors;

public class Main {
     public String solution(String str){
        char[] ch = str.toCharArray();
        List<Character> chArr = new ArrayList<>();

        for(char c : ch){
            if('a'<=c && c<='z' || 'A'<=c&&c<='Z'){
                chArr.add(c);
            }
        }
        Collections.reverse(chArr);

        String answer = "";
        int i=0;
        for(char c : ch){
            if('a'<=c && c<='z' || 'A'<=c&&c<='Z'){
                answer+=chArr.get(i);
                i++;
            }
            else{
                answer+=c;
            }
        }
        return answer;
    }
    public static void main(String[] args){
        Main T = new Main();
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(T.solution(str));
    }
}

문자열을 받은후 char로된 array로 변형
각 char를 조사해서 알파벳인경우만 빈 arr에 추가후에 리버스를 해준다.

다시 array를 조사해서 알파벳인경우만 새로생성한 arr에서 하나씩 조회해서 알파벳만 거꾸로 출력해준다.

참고한 문법

  • str.toCharArray();
    문자열을 char로 된 어레이로 변형해줌
  • Collections.reverse(arr);
    arr을 뒤집어줌
  • 정규식은 String으로 해줘야한다.......

참고할 코드

import java.util.*;
class Main {	
	public String solution(String str){
		String answer;
		char[] s=str.toCharArray();
		int lt=0, rt=str.length()-1;
		while(lt<rt){
			if(!Character.isAlphabetic(s[lt])) lt++;
			else if(!Character.isAlphabetic(s[rt])) rt--;
			else{
				char tmp=s[lt];
				s[lt]=s[rt];
				s[rt]=tmp;
				lt++;
				rt--;
			}
		}
		answer=String.valueOf(s);
		return answer;
	}

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

탐색 위치를 두개로 둔상태로 진행한다.
lt는 맨왼쪽 rt는 맨 오른쪽을 둔상태로 알파벳을 만날때까지 움직인다. 둘다 알파벳인경우 둘의 위치를 바꿔준다.
lt<rt라는 조건문을 통해서 엇갈리게되면 그만두게된다.

  • Character.isAlphabetic(char) 알파벳인지 판단해줌
profile
개발새발X발일지

0개의 댓글

관련 채용 정보