개발놀이터
1-7. 회문 문자열 본문
package string.CircleString17.my;
import java.util.Scanner;
public class Main {
/**
* -나의 풀이-
* 이전 시간에 배웠던 lt 와 rt 의 개념을 도입해서 각각의 문자가 다르면 checkPoint 를 1 증가시켜서
* 최종적으로 0이면 (증가하지 않으면 -> 각각의 문자가 같으면) YES 를 리턴, 0이 아니면 NO 를 리턴
*
* --피드백--
* 음... 문제는 맞았다. 하지만 알고리즘, 자료구조를 사용했다는 느낌은 전혀 받을 수 없었음
* 그냥 꼼수같은 느낌..? 이거 실제로 코딩테스트에서 제출하면 답은 맞지만 높은 점수는 주지 않을듯 함
*
* -선생님의 풀이-
* 1. 전체 길이 / 2 한만큼까지 for 문을 돌려서 앞 뒤를 charAt 으로 비교 했음
* 2. 앞선 시간에서 배웠던 StringBuilder 에 reverse 메서드로 tmp 라는 새로운 변수에 저장한 후
* 기존 문자열과 tmp 를 equalsIgnoreCase (대소문자와 관계없이 equals 비교) 를 이용하여 비교 후 YES 혹은 NO 리턴
*
* --코드리뷰--
* 1번 풀이는 내 풀이와 크게 다르지 않은 듯 함 2번 풀이가 개인적으로 맘에 듦
*/
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String input = kb.next();
System.out.println(solution(input));
}
private static String solution(String input) {
int lt = 0, rt = input.length() - 1;
char[] c = input.toCharArray();
int checkPoint = 0;
while (lt < rt) {
char left = Character.toLowerCase(c[lt]);
char right = Character.toLowerCase(c[rt]);
if (left != right) {
checkPoint++;
}
lt++;
rt--;
}
if (checkPoint == 0) {
return "YES";
}
else {
return "NO";
}
}
}
↑ 내풀이
package string.CircleString17.teacher;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(solution(str));
}
private static String solution(String str) {
String answer = "NO";
String tmp = new StringBuilder(str).reverse().toString();
if (str.equalsIgnoreCase(tmp)) return answer = "YES";
/*
String answer = "YES";
int len = str.length();
str = str.toUpperCase();
for (int i = 0; i < len / 2; i++) {
if (str.charAt(i) != str.charAt(len - i - 1)) {
return "NO";
}
}
*/
return answer;
}
}
↑ 선생님 풀이
package string.CircleString17.my;
import java.util.Scanner;
public class Refactoring {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String input = kb.next();
System.out.println(solution(input));
}
private static String solution(String input) {
int lt = 0, rt = input.length() - 1;
input = input.toLowerCase();
char[] c = input.toCharArray();
// int checkPoint = 0; 기존의 checkPoint 삭제
while (lt < rt) {
// char left = Character.toLowerCase(c[lt]); 각각을 소문자로 변경하는 것이 아니라 일단 input 을 소문자로
// char right = Character.toLowerCase(c[rt]); 변경함
if (c[lt] != c[rt]) { // left != right 에서 현재 코드로 변경경
return "NO";
}
lt++;
rt--;
}
return "YES";
}
}
↑ 리팩토링
'기타 > 코딩테스트' 카테고리의 다른 글
1-9. 숫자만 추출 (0) | 2023.02.09 |
---|---|
1-8. 유효한 회문 문자열 (0) | 2023.02.09 |
1-6. 중복된 문자 제거 (0) | 2023.02.07 |
1-5. 특정 문자 뒤집기 (0) | 2023.02.07 |
1-4. 단어 바꾸기 (0) | 2023.02.07 |