Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_특정 문자 뒤집기) 본문
알고리즘/인프런 - Java알고리즘 입문
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_특정 문자 뒤집기)
slow-walker 2023. 8. 27. 03:29
https://cote.inflearn.com/contest/10/problem/01-05
OnlineJudge
cote.inflearn.com
(위의 링크는 인프런 로그인 후, 해당 강의를 사지 않으면 접속이 되지 않습니다)
5. 특정 문자 뒤집기
예시 입력 1
a#b!GE*T@S
예시 출력 1
S#T!EG*b@a
내가 푼 틀린 풀이
예시 입출력대로 나와서 제출했더니, 오답이라고 나온다
알고보니 내가 푼 풀이는 앞과 뒤에 위치한 각 인덱스가 알파벳일때만 가능하고, 아래 예시처럼 서로 알파벳이 아닌경우에는 안된다
// 입력값
kdj#@kdjg%$#kdjgk@kd$dk
// 리턴값
kd$#@@kgj%$#kdgjdkkdjdk
// 정답값
kdd#@kkgj%$#dkgjd@kj$dk
import java.util.Scanner;
public class Main {
public String solution(String str) {
String answer = "";
char[] strCharArray = str.toCharArray();
int lt = 0, rt = strCharArray.length - 1;
int idx = 0;
while (lt < rt) {
char tmp = strCharArray[lt];
if ((strCharArray[idx] >= 'a' && strCharArray[idx] <= 'z') ||
(strCharArray[idx] >= 'A' && strCharArray[idx] <= 'Z')) {
strCharArray[lt] = strCharArray[rt];
strCharArray[rt] = tmp;
lt ++;
rt --;
idx ++;
} else {
lt ++;
rt --;
idx ++;
}
}
String string = String.valueOf(strCharArray);
return string;
}
public static void main(String[] args) {
Main main = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(main.solution(str));
}
}
내가 푼 맞은 풀이
그래서 lt가 알파벳일 경우, rt가 알파벳일 경우를 분기처리를 따로 해서, 아니면 한칸씩 이동하고,
둘다 알파벳일 경우에는 문자를 바꿔주도록 풀었다
import java.util.Scanner;
public class Main {
public String solution(String str) {
String answer = "";
char[] strCharArray = str.toCharArray();
int lt = 0, rt = strCharArray.length - 1;
while (lt < rt) {
if (!(strCharArray[lt] >= 'a' && strCharArray[lt] <= 'z') &&
!(strCharArray[lt] >= 'A' && strCharArray[lt] <= 'Z')) {
lt ++;
} else if (!(strCharArray[rt] >= 'a' && strCharArray[rt] <= 'z') &&
!(strCharArray[rt] >= 'A' && strCharArray[rt] <= 'Z')) {
rt --;
} else {
char tmp = strCharArray[lt];
strCharArray[lt] = strCharArray[rt];
strCharArray[rt] = tmp;
lt ++;
rt --;
}
}
answer = String.valueOf(strCharArray);
return answer;
}
public static void main(String[] args) {
Main main = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(main.solution(str));
}
}
강의 답안
알고보니 Character클래스에서 isAlphabetic()이라는 함수가 있어서 분기처리를 쉽게 할 수 있었다!
import java.util.Scanner;
public class Main {
public String solution(String str) {
String answer = "";
char[] strCharArray = str.toCharArray();
int lt = 0, rt = strCharArray.length - 1;
while (lt < rt) {
char tmp = strCharArray[lt];
if (!Character.isAlphabetic(strCharArray[lt])) {
lt ++;
} else if (!Character.isAlphabetic(strCharArray[rt])) {
rt --;
} else {
strCharArray[lt] = strCharArray[rt];
strCharArray[rt] = tmp;
lt ++;
rt --;
}
}
answer = String.valueOf(strCharArray);
return answer;
}
public static void main(String[] args) {
Main main = new Main();
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(main.solution(str));
}
}
'알고리즘 > 인프런 - Java알고리즘 입문' 카테고리의 다른 글
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_회문 문자열) (0) | 2023.08.28 |
---|---|
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_중복 문자 제거) (0) | 2023.08.28 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_단어 뒤집기) (0) | 2023.08.26 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_문장 속 단어) (0) | 2023.08.25 |
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(문자열_대소문자 변환) (0) | 2023.08.25 |