BOJ 팰린드롬?

2020. 9. 22. 19:56·알고리즘/BOJ

www.acmicpc.net/problem/10942

 

10942번: 팰린드롬?

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

www.acmicpc.net

정수형 배열을 입력받고 구간의 값이 팰린드롬인지 판단하는 문제다.

처음에는 문자열로 접근해서 reverse를 사용했지만 2000번에 대해서 1백만 번씩 뒤집히니 시간 초과.

결국 dp로 풀었다.

#include <iostream>
#include <vector>
using namespace std;

int f(vector<vector<int>>& d, vector<int>& ar, int s, int e) {
	if (s >= e) return 1;
	if (d[s][e] != -1) return d[s][e];
	if (ar[s] == ar[e]) d[s][e] = f(d, ar, s + 1, e - 1);
	else d[s][e] = 0;
	return d[s][e];
}

int main() {
	ios::sync_with_stdio(false); cin.tie(0);

	int n, m, x, y;
	cin >> n;
	vector<vector<int>> d(n + 1, vector<int>(n + 1, -1));
	vector<int> ar(n + 1);

	for (int i = 1; i <= n; i++) cin >> ar[i];
	cin >> m;
	for (int i = 1; i <= m; i++) {
		cin >> x >> y;
		cout << f(d, ar, x, y) << '\n';
	}
	return 0;
}

탑다운 dp로 풀었는데 각 구간에 대해서 대칭되는 범위의 숫자가 같다면 범위를 좁혀서 재고 다르다면 0을 저장해준다.

 

'알고리즘 > BOJ' 카테고리의 다른 글

BOJ 2096 내려가기  (0) 2020.09.23
BOJ 2015 수들의 합 4  (0) 2020.09.23
BOJ 18870 좌표 압축  (0) 2020.09.21
BOJ 1747 소수&팰린드롬  (0) 2020.09.21
백준 2086 피보나치 수의 합  (0) 2020.09.20
'알고리즘/BOJ' 카테고리의 다른 글
  • BOJ 2096 내려가기
  • BOJ 2015 수들의 합 4
  • BOJ 18870 좌표 압축
  • BOJ 1747 소수&팰린드롬
khyu2
khyu2
  • khyu2
    dev log
    khyu2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘
        • BOJ
        • Programmers
        • Algorithm
        • SWEA
      • 개발
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MST
    알고리즘
    다익스트라
    완전 탐색
    BOJ
    코딩테스트 연습
    냅색
    조합
    팰린드롬
    유니온 파인드
    피사노 주기
    이분탐색
    이분 탐색
    피보나치 수
    트리
    큐
    구현
    dfs
    프로그래머스
    소수
    행렬 제곱
    BFS
    분할 정복
    SWEA
    GREEDY
    크루스칼
    dp
    시뮬레이션
    우선순위 큐
    완전탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khyu2
BOJ 팰린드롬?
상단으로

티스토리툴바