주어진 2차원 배열을 돌면서 회문이 몇개 있는지 구하는 문제
===> 구해야 하는 회문의 길이를 주고 가로, 세로 총 몇개의 회문이 있는지 구해야 함
회문 문제에서 핵심은 전체 배열을 탐색할 필요 없이
행 또는 열 기준으로 ( 배열의 길이 - 구해야 할 회문의 길이 + 1 ) 만큼 탐색해주기
예를 들어 4글자 회문을 구하면 1번째 - 4번째, 2번째 - 3번째 가 같은지만 보면 되기 때문에
다시 for문을 돌려서 회문의 길이/2 만큼 비교해주자
<코드>
import java.util.Scanner;
public class Solution {
/*
* 회문 문제 공통 꼭 외우자 배열 탐색은 행 or 열 기준 -> 배열 길이 - 회문 길이 + 1 까지만 보면 됨 회문 문자열인지 아닌지
* 판단하려면 그 문자열을 반 접어서 비교한다고 생각 회문길이/2 횟수만큼 비교
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for(int tc = 1; tc <= 10; tc++) {
int len = sc.nextInt(); //회문의 길이
char [][] map = new char [8][8];
//배열 채워주기
for(int i=0; i<map.length; i++) {
String str = sc.next();
for(int j=0; j<map[i].length; j++) {
map[i][j] = str.charAt(j);
}
}
//배열 탐색 후 flag의 true 여부에 따라서 cnt 증가 시켜줄 것
boolean flag;
int cnt = 0;
//행 기준 탐색
for(int i=0; i<map.length; i++) {
for(int j=0; j<map.length-len+1; j++) {
flag = true;
for(int k=0; k<len/2; k++)
if(map[i][j+k]!=map[i][j-k+len-1])
flag = false;
if(flag) cnt ++;
}
}
// //가로
// for(int i = 0; i < map.length; i++) {
// for(int j = 0; j < map.length - len + 1; j++) {
// flag = true;
// for(int h = 0; h < len / 2; h++)
// if(map[i][j + h] != map[i][j - h + len - 1])
// flag = false;
// if(flag) cnt++;
// }
// }
//열 기준 탐색
for(int i=0; i<map.length-len+1; i++) {
for(int j=0; j<map.length; j++) {
flag = true;
for(int k=0; k<len/2; k++)
if(map[i+k][j]!=map[i-k+len-1][j])
flag = false;
if(flag) cnt ++;
}
}
// //세로
// for(int i = 0; i < map.length - len + 1; i++) {
// for(int j = 0; j < map.length; j++) {
// flag = true;
// for(int h = 0; h < len / 2; h++)
// if(map[i + h][j] != map[i - h + len - 1][j])
// flag = false;
// if(flag) cnt++;
// }
// }
System.out.println("#"+tc+" "+cnt);
}
}
}
가로, 세로 기준으로 for문을 돌릴 때 괄호를 잘못 묶어줘서 계속 fail이 떴던 문제
회문의 개념과 구하는 방식만 알면 어렵지 않은 문제였음
괄호로 묶는 것 주의하기!!!!
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA] 13218.조별과제.java (0) | 2023.05.25 |
---|---|
[SWEA] 12368. 24시간.java (0) | 2023.05.25 |
SWEA 9229 한빈이와 Spot Mart Java (0) | 2022.12.25 |
SWEA 2001 파리퇴치 Java (0) | 2022.12.16 |
SWEA 1954 달팽이 숫자 Java (0) | 2022.12.16 |