Recent Posts
Link
250x250
오늘보다 더 나은 내일의 나에게_
자바 알고리즘 문제 풀이 String Q05_특정 문자 뒤집기 본문
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
'ALGORITHM > inflearn_javaAlgorithm' 카테고리의 다른 글
자바 알고리즘 문제 풀이 String Q07_회문 문자열 (0) | 2022.01.28 |
---|---|
자바 알고리즘 문제 풀이 String Q06_중복문자제거 (0) | 2022.01.26 |
자바 알고리즘 문제 풀이 String Q04_단어 뒤집기 (0) | 2022.01.23 |
자바 알고리즘 문제 풀이 String Q03_문장 속 단어 (0) | 2022.01.23 |
자바 알고리즘 문제 풀이 String Q02_대소문자 변환 (0) | 2022.01.23 |
Comments