본문 바로가기
알고리즘/Java 코딩 테스트 준비

[Java] 특정 조건에 부합되는 문자 뒤집기(알파벳만 위치 바꾸기)

by Dev dreamer 2023. 1. 23.

입력

a#b!GE*T@S

 

출력

S#T!EG*b@a

 

대칭되는 알파뱃의 위치를 바꾸고 만약 한쪽만 알파벳이고 다른한쪽은 특수문자일 경우에

특수문자인 부분을 한번더 이동하여 체크해 바꿔준다.

 

알파벳과 특수문자를 어떻게 구분해야할지 몰라서 강의 먼저 수강하였습니다.

 

Character.isAlphabetic(char)

해당 문자가 알파뱃이면 참을 반환하고 알파벳이 아니면 거짓을 반환한다.

 

 

 

강사님 풀이랑 완벽히 동일( 보고하지말자..ㅠㅠㅠㅠㅠ)

String 을 입력받을 Scanner 를 만들고

solution 에서 입력받은 문자열을 담을 char[] 변수를 만들어준다

 

일단 lt 와 rt(문자열 길이 -1 =>인덱스니까)를 설정해놓고

rt 가 lt 보다 클때까지 돌아가는 while문을 만든다.

 

그리고 Character.isAlphabet(charArr[lt]) 이 단어 하나가 알파벳이지 않으면! 을 하기 위해서

앞에 ! 를 붙인 조건문에서 lt 를 한칸 오른쪽으로 이동시킨다 

rt 도 마찬가지로 이동시켜준다.

 

이와 같은 두 조건을 모두 만족하지 않는 경우 (즉 가르키는 모든 단어가 알파벳인 경우)

문자를 스왑해주고 lt 와 rt를 한칸씩 옮겨준다.

 

lt 가 rt보다 커지는 순간 while 문은 종료되며

 

이때 answer에 값을 담아주는데 String라는 클래스의 valueof 라는 기능을 통해 charArr를 담아준다.

 

 

 

import java.util.Scanner;

public class Main {
	public String solution(String str) {
		
		String answer;
		int lt =0;
		int rt = str.length()-1;
		
		char[] charArr = new char[str.length()];
		charArr= str.toCharArray();
		
		while(lt<rt) {
			
			if(!Character.isAlphabetic(charArr[lt])) {
				lt++;
			}else if(!Character.isAlphabetic(charArr[rt])) {
				rt--;
			}else {
				char temp = charArr[lt];
				charArr[lt]= charArr[rt];
				charArr[rt]=temp;
				lt++;
				rt--;
			}
		}
		
		answer=String.valueOf(charArr);
		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));
		
		
	}
		
		
}

 

 

 

 

 

 

 

 

코테 관련해서 많이 부담스러웠는데 강의를 통해 푸는 방법들을 배우니 이 시간이 즐겁습니다.

진짜 기능하나하나 다양한 방법으로 잘 가르쳐주십니다.

출처 : 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 대시보드 - 인프런 | 강의 (inflearn.com)

댓글