Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- domain driven develop
- 자바 디자인패턴
- go
- 하둡
- String 함수
- 자바 디자인 패턴
- 정렬
- 백준 파이썬
- 몽고디비 렘
- 12761번 돌다리
- http 개념
- flask
- 백준 12761
- 백준 12761번
- MongoDB Realm
- 우분투
- golang
- hadoop
- 고 배열
- golang struct
- 트리 순회
- 도메인 주도 개발
- 백준 사이트
- 12761 돌다리
- 도메인 주도 개발 시작하기
- 백준
- ddd
- 자바
- http 완벽가이드
- 파이썬
Archives
- Today
- Total
개발바닥
BOJ_10942 [ 팰린드롬? ] 본문
반응형
문제
https://www.acmicpc.net/problem/10942
문제 해결 방법
효율적으로 풀기 위해서는 DP 알고리즘 사용해야 된다.
2차원 배열 변수 DP를 선언 후 Bottom - up 방식으로 문제를 해결하면 된다.
시작과 끝에 해당되는 인덱스에 값이 같으면 안에가 팰린드롬인지 아닌지만 알고 있으면 된다.
if( arr[시작] 과 arr[끝]이 같고 dp[시작+1][끝-1]이 팰린드롬이라면)
DP[시작][끝] = 팰린드롬이다.
소스 코드 보기
https://github.com/jokerKwu/BOJ_Algorithm/blob/master/Dynamic%20programming/BOJ_10942.cpp
#include<iostream>
#include<vector>
using namespace std;
#define MAX 2002
bool dp[MAX][MAX];
int arr[MAX];
int N, M;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> arr[i];
}
for (int i = 1; i <= N; i++) dp[i][i] = true;
for (int i = 1; i < N; i++)
if (arr[i] == arr[i + 1]) dp[i][i + 1] = dp[i + 1][i] = true;
for (int i = 2; i < N; i++) { //이게 길이
for (int j = 1; j <= N-i; j++) {
if (arr[j] == arr[j + i] && dp[j + 1][j + i - 1])
dp[j][j + i] = dp[j + i][j] = true;
}
}
cin >> M;
for (int i = 0; i < M; i++) {
int s, e,answer = 0;
cin >> s >> e;
if (dp[s][e]) answer = 1;
cout << answer << '\n';
}
return 0;
}
반응형
'[ Algorithm ] > [ BOJ ]' 카테고리의 다른 글
BOJ_5397 [ 키로거 ] (0) | 2023.03.04 |
---|---|
BOJ_15653 [ 구슬 탈출4 ] (0) | 2020.06.30 |
BOJ_14442 [ 벽 부수고 이동하기 2 ] (0) | 2020.06.07 |
BOJ_16935 [ 배열 돌리기 3 ] (0) | 2020.05.07 |
BOJ_17069 [ 파이프 옮기기2 ] (0) | 2020.05.07 |
Comments