[java] 회문(앞에서 뒤에서 읽을 때 같은 문자) 문자열 풀기
입력
pop
출력
yes
조건: 대소문자 구분 X
생각보다 쉽게 금방했던것 같다
대소문자를 상관하지 않으므로 str을 모두 대문자로하고
그전에 문자 위치 바꿀때 썼던 lt 와 rt 를 활용했다.
받은 문자열을 toCharArray 로 배열에 담고
각 문자가 다르면 cnt 수가 증가하게 했고
문자가 같으면 증가하지 않는다
전체 문자열을 while 을 통해 돌았을 때
cnt 가 0 이라면 우리가 원하는
회문문자인 것이다.
회문문자에서 홀수의 경우 가운대 단어는
조건에 영향을 미치지 않는다
그래서 lt<rt 인 상황에서만 해당 조건을 체크해 주면 됐다.
import java.util.Scanner;
public class Main {
public String solution(String str) {
String answer;
String str2 = str.toUpperCase();
int lt = 0, rt = str2.length() - 1;
char[] a = str2.toCharArray();
int cnt = 0;
while (lt < rt) {
if (a[lt] != a[rt]) {
cnt++;
lt++;
rt--;
} else {
lt++;
rt--;
}
}
if (cnt == 0) {
answer = "yes";
}else {
answer="no";
}
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));
}
}
강사님 풀이.
강사님은 문자의 길이를 이용하서서
for문을 돌리고 index의 위치를 위와같이
왼쪽에서는 String.charAt(i) 오른쪽에선 String.CharAt(str.length() - i - 1) 을 통해 위치를 잡아주었다.
answer에 초기값을 yes 로 선언하고
for문을 돌릴때
단 한번이라도 같지 않으면
회문문자가 아니니까
그 순간 바로 No 를 반환한다.
StringBuilder 를 이용하는 경우
StringBuilder 를 통해 받은 str을 넣고 .reverse() 함수를 통해 뒤집어 준다
이 뒤집은 값과 str을 비교하기위해 eqaul 함수를 쓰는데
이때 대소문자 구분이 없으므로 equalsignoreCase 라는 함수를 함께 써준다.
코테 관련해서 많이 부담스러웠는데 강의를 통해 푸는 방법들을 배우니 이 시간이 즐겁습니다.
진짜 기능하나하나 다양한 방법으로 잘 가르쳐주십니다.
출처 : 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 대시보드 - 인프런 | 강의 (inflearn.com)