알고리즘/Java 코딩 테스트 준비

[java] 회문(앞에서 뒤에서 읽을 때 같은 문자) 문자열 풀기

Dev dreamer 2023. 1. 24. 11:49

입력

 

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)