처음부터 차근차근

class2 - 1259번 팰린드롬수 (자바) 본문

알고리즘

class2 - 1259번 팰린드롬수 (자바)

_soyoung 2024. 5. 19. 20:39
반응형

문제 : https://www.acmicpc.net/problem/1259

 

이 문제에서 쓰인 개념

StringBuffer, StringBulilder

자주 가변하는 문자열 생성할 때 사용하는 클래스.

둘의 차이점 : 

StringBuffer : 멀티스레드 환경에서 성능이 좋음.

StringBuilder : 싱글스레드 환경에서 성능이 좋음.

 

StringBuffer 클래스 함수

  • .reverse() : 문자열 순서 거꾸로 나열

 

소스

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

public class q_1259 {
	public static void main(String args[]) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

            StringBuffer sb;
            List<String> results = new ArrayList<>();
            
            while (true) {
            	sb = new StringBuffer(br.readLine());
            	
            	if (sb.toString().equals("0")) {
            		break;
            	}
            	
            	if (sb.toString().equals(sb.reverse().toString())) {
            		results.add("yes");
            	}
             	else {
            		results.add("no");
            	}
            }
            
            for (String result : results) {
            	bw.write(result + "\n");
            }
            
            // close
            br.close();
            bw.flush();
            bw.close();
      }
		catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

주의할 점 

sb.reverse().toString().equals( sb.toString() );

이렇게 쓰면 안됨.

이렇게 하면 reverse 된 값이 sb에 남아있어서 무조건 true로 나옴.

 

sb.equals("0");

이렇게 쓰면 안됨.

StringBuffer는 String과 다르게 equals()를 재정의 하지 않음.

그래서 == 을 쓰는 행위와 같음.

따라서 객체 sb와 문자열 "0"의 주솟값은 항상 다르기 때문에 무조건 false가 나오게 됨.

 

반응형
Comments