-
[Java] 알고리즘 문제 - 특정 문자 뒤집기Java 알고리즘 문제/자바(Java) 알고리즘 문제풀이 입문 2023. 5. 17. 23:08반응형
특정 문자 뒤집기
설명
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,
특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
입력
첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.
출력
첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.
Ex) a#b!GE*T@S -> S#T!EG*b@a
문자배열을 만든다 순서대로 0번째부터 인덱스를 가진다. lt -> left, rt -> right
lt와 rt가 모두 문자라면
lt가 특수문자라면 lt+
rt가 특수문자라면 rt-
둘다 아니라면 둘다 알파벳을 가르키게 된다.
package chap1; import java.util.Scanner; public class Ex01_solution { public String ch1_solution(String str){ String answer; char[] s= str.toCharArray(); //문자 배열 생성 int lt = 0; int rt = str.length() -1; // 입력받은 문자열의 길이를 정해두지 않아서 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) { Ex01_solution T = new Ex01_solution(); Scanner kb = new Scanner(System.in); String str = kb.next(); System.out.println(T.ch1_solution(str)); } }
Ex01_solution T = new Ex01_solution(); Scanner kb = new Scanner(System.in); String str = kb.next(); System.out.println(T.ch1_solution(str));
Scanner를 통해 입력을 받고 str에 값을 넣어 값을 전달한다.
public String ch1_solution(String str){
Scanner를 통해 a#b!GE*T@S 해당 문자열을 입력한다면 ch1_solution의 매개변수에 전달이된다.
String answer; char[] s= str.toCharArray(); //문자 배열 생성 int lt = 0; int rt = str.length() -1;
전달받은 str을 char[]배열을 생성하여 담아준다.
a # b ! G E * T @ S 이때 lt 는 left, rt 는 right를 의미한다.
rt의 경우 입력받은 문자열의 길이를 알지 못하므로 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--; } }
이제 해당 문자열을 돌면서 영어 알파벳만 뒤집고 특수문자는 그대로 두어야하기때문에 while문을 통하여 char[]을 탐색한다. 이때 알파벳을 검색하는 기능으로는 Character.isAlphabetic()을 사용해주자
맨처음에는 lt의 값이 0 이므로 0번째에 해당하는 a을 탐색하게 된다.
이때 a는 알파벳이기때문에 else if로 이동하고 rt의 경우도 알파벳이기 때문에 else구문으로 이동한다.
char tmp를 만들어 둔 후에 s[lt] => a 값을 tmp에 넣어준다.
s[lt] -> s[0] s[rt] -> s[9] tmp a S a 해당 상태에서 s[lt] 에 s[rt]값을 대입해준다. 그러면 아래와 같은 표가 된다.
s[lt] -> s[0] s[rt] -> s[9] tmp S S a 그런 후에 s[rt]에 s[lt]을 값을 미리 저장해두었던 tmp값을 대입한다.
s[lt] -> s[0] s[rt] -> s[9] tmp S a a 이와같이 각 인덱스에서 알파벳을 찾는다면 그 인덱스에 해당하는 rt와 lt값을 맞바꿔준다.
반응형'Java 알고리즘 문제 > 자바(Java) 알고리즘 문제풀이 입문' 카테고리의 다른 글
[JAVA] 알고리즘 문제 - 암호 해독하기 (0) 2023.08.09 [JAVA] 알고리즘 문제 문자열 압축 (0) 2023.08.09 [JAVA] 알고리즘 문제 - 유효한 팰린드롬 (1) 2023.05.30 [JAVA] 알고리즘 문제 - 회문 문자열 (0) 2023.05.30 [Java] 알고리즘 - 중복된 문자 제거 (1) 2023.05.17