https://swexpertacademy.com/main/main.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
SWEA 1216번
이렇게 회문 구하는 문제
가로와 세로 나눠서 코드 작성
[ 접근 방식 ] 을 문자 배열을 board[]라고 하고, 위 행렬 중 한 줄을 예시로 들어서 설명해보면
k를 증가시키면서 board[j] == board[k] 인걸 찾고,
같은 걸 찾았으면 0부터 k-j 전만큼 j에 더하고, k에서 빼면서 문자가 같은지 확인한다.
같으면 flag = true, 다르면 flag = false
k-j전까지 더하고 뺐는데 flag = true라면 k-j+1만큼 길이가 회문 길이이다.
import java.util.Scanner;
public class P1216 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int T = 10;
for(int t=1; t<=T; t++){
int tc = sc.nextInt();
char[][] a = new char[100][100];
for(int i=0; i<100; i++){
String str = sc.next();
char[] ch = str.toCharArray();
for(int j=0; j<100; j++){
a[i][j] = ch[j];
}
}
int max=Integer.MIN_VALUE;
// 가로
for(int i=0; i<100; i++){
for(int j=0; j<100; j++){
for(int k=j; k<100; k++){
if(a[i][j]==a[i][k]){
boolean flag = true;
for(int g=0; g<k-j; g++){
if(a[i][j+g]!=a[i][k-g]){
flag = false;
}
}
if(flag) {
max = Math.max(max, k-j+1);
}
}
}
}
}
// 세로
for(int i=0; i<100; i++){
for(int j=0; j<100; j++){
for(int k=j; k<100; k++){
if(a[j][i]==a[k][i]){
boolean flag = true;
for(int g=0; g<k-j; g++){
if(a[j+g][i]!=a[k-g][i]){
flag = false;
}
}
if(flag) {
max = Math.max(max, k-j+1);
}
}
}
}
}
System.out.println("#"+tc+" "+max);
}
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA] 1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 (0) | 2022.11.10 |
---|---|
[SWEA] 1225. [S/W 문제해결 기본] 7일차 - 암호생성기 (0) | 2022.11.10 |
[SWEA] 2805. 농작물 수확하기 (0) | 2022.11.09 |
[SWEA] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (0) | 2022.11.09 |
[SWEA] 1974. 스도쿠 검증 (0) | 2022.11.08 |