https://www.acmicpc.net/problem/10942

 

10942번: 팰린드롬?

총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다.

www.acmicpc.net

코드설명

이 문제같은경우 투포인터를 활용하여 풀수 있습니다.

 

투포인터를 활용하여 팰린드롬인지 아닌지 판단하여 출력하면 됩니다.

가장 왼쪽의 Left 와 가장 오른쪽 지점의 Right를 기준으로 투포인터를 작동시킵니다.

해당 값들이 같다면 계속해서 이어가고, 같지않다면 팰린드롬이 될 수 없으므로 Return false 하여 중단합니다.

 

출력시간을 줄이기 위해 StringBuilder를 사용합니다.

코드

투포인터 활용하여 팰린드롬인지 체크합니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	public static int N, M;
	public static int answer = 0;
	public static int[] arr;
	public static StringBuilder sb = new StringBuilder();
	public static void main(String[] args) throws IOException{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer st = new StringTokenizer(br.readLine());
    	
    	N = Integer.parseInt(st.nextToken());
    	arr = new int[N+1];
    	
    	st = new StringTokenizer(br.readLine());
    	for(int i=1;i<=N;i++) {
    		arr[i] = Integer.parseInt(st.nextToken());    	}
    	
    	st = new StringTokenizer(br.readLine());
    	M = Integer.parseInt(st.nextToken());
    	
    	for(int i=0;i<M;i++) {
    		st = new StringTokenizer(br.readLine());
    		int S = Integer.parseInt(st.nextToken());
    		int E = Integer.parseInt(st.nextToken());
    		
    		if(getPalindrome(S, E) == true) {
    			sb.append(1).append("\n");
    		}else {
    			sb.append(0).append("\n");
    		}
    		
    	}
    	System.out.println(sb.toString());
    	
    	
	}
	
	public static boolean getPalindrome(int S, int E) {
		int left = S;
		int right = E;
		
		while(left < right) {
			if(arr[left] == arr[right]) {
				left += 1;
				right -=1;
			}else {
				return false;
			}
		}
		
		return true;
		
	}
	
	
}

+ Recent posts