오늘보다 더 나은 내일의 나에게_

자바 알고리즘 문제 풀이 String Q05_특정 문자 뒤집기 본문

ALGORITHM/inflearn_javaAlgorithm

자바 알고리즘 문제 풀이 String Q05_특정 문자 뒤집기

chan_96 2022. 1. 25. 00:24
728x90
설명

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

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


입력

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


출력

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

 


예시 입력 1


예시 출력

a#b!GE*T@S S#T!EG*b@a

 

코드

내가 입력한 코드

package String;

import java.util.Scanner;

public class Q05 {
	public String solution(String str) {
		
		char[] c = str.toCharArray();
		int lt = 0, rt = c.length-1;
		
		// A65 Z90 , a97 z122
		while(lt < rt) {
			if(((c[lt] >= 65 && c[lt] <= 90) || (c[lt] >= 97 && c[lt] <= 122))&&((c[rt] >= 65 && c[rt] <= 90) || (c[rt] >= 97 && c[rt] <= 122))) {
				char tmp = c[lt];
				c[lt] = c[rt];
				c[rt] = tmp;
			}
			lt++;
			rt--;
		}
		String answer = String.valueOf(c);
		
		
		return answer;
	}
	
	public static void main(String[] args) {
		Q05 T = new Q05();
		Scanner kb = new Scanner(System.in);
		String str = kb.next();
		
		System.out.println(T.solution(str));
	}
}

 




해설 코드

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));
	}
}

 

 

풀이 및 정리 

이번 문제도 실행결과는 정답으로 나왔지만 채점 결과는 오답이었다. 진짜 오답이거나 너무 비효율적인 코드여서 그런 듯하다. 해답 코드는 정말 비 프로그래밍적인 나한테는 직접 구현하기 어려운 if elseif else문인 듯 싶다...


- Character.isAlphabetic( ) 매개변수 안에 들어간 문자가 알파벳인지 boolean 타입으로 반환 

lt, rt변수는 문자열의 처음과 끝을 비교해줄 임시 변수 값이다.
else문은  c[lt], c[rt]가 모두 알파벳일 때 실행된다.

 

728x90
Comments