728x90
반응형
설명
영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고,
특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요.
입력
첫 줄에 길이가 100을 넘지 않는 문자열이 주어집니다.
출력
첫 줄에 알파벳만 뒤집힌 문자열을 출력합니다.
예시 입력 1
a#b!GE*T@S
예시 출력 1
S#T!EG*b@a
정답 코드 및 풀이
lt 는 LefT의 줄임말이고 rt는 RighT의 줄임말입니다.
말 그대로 lt는 제일 왼쪽의 글자부터 오른쪽으로 이동하고, rt는 제일 오른쪽의 끝 글자부터 왼쪽으로 이동합니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//입력을 받는 Scanner
Scanner sc = new Scanner(System.in);
//입력한 내용을 받음
String str = sc.next();
//정답 출력을 위한 answer선언
String answer;
//문자 배열 하나 생성
char[] chars = str.toCharArray();
//lt는 첫번째 문자를 가리키고, rt는 마지막 글자를 가리킴
//배열은 0부터 시작하기 때문에 -1을 해주어야 마지막 배열이 됨.
int lt = 0, rt = str.length()-1;
//lt가 rt보다 왼쪽에 있을 때 까지 반복
while (lt < rt){
//Character.isAlphabetic()을 이용해서 특수문자 여부 확인
if (!Character.isAlphabetic(chars[lt])) {
//알파벳이 아니면 오른쪽으로 한칸 이동
lt ++;
//rt도 특수문자인지 확인
} else if (!Character.isAlphabetic(chars[rt])){
//알파벳이 아니면 왼쪽으로 한칸 이동
rt --;
//둘 다 알파벳이면 두개 자리 바꾸기
} else {
//잠시 자리바꿔치기를 위해 tmp생성
char tmp = chars[lt];
chars[lt] = chars[rt];
chars[rt] = tmp;
//자리를 바꾸고 나면 둘 다 각자 방향으로 한칸씩 옆으로 이동
lt++;
rt--;
}
}
//정답 출력
answer = String.valueOf(chars);
System.out.println(answer);
}
}
게시글이 도움이 되었다면
[로그인]이 필요 없는 ❤ 눌러주세요:)
반응형
'Java 알고리즘' 카테고리의 다른 글
[Java/알고리즘] 07 회문 문자열 정답 및 해설 (0) | 2023.01.15 |
---|---|
[Java/알고리즘] 06 중복문자제거 정답 및 해설 (0) | 2023.01.14 |
[Java|알고리즘] 단어 뒤집기 문제 및 해설 (0) | 2023.01.12 |
[Java] 3. 문장 속 단어 | 자바 알고리즘 (0) | 2023.01.03 |
[백준/Java] 2744번 대소문자 바꾸기 정답 | 코드 공개 및 해설 (0) | 2023.01.02 |