[SWEA] 1215. 회문1
문제 링크
풀이 과정
회문(Palindrome)을 고르는 문제입니다.
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
StringBuilder sb = new StringBuilder();
if (j + N <= SIZE) {
for (int y = j; y < j + N; y++) sb.append(map[i][y]);
if (check(sb.toString().toCharArray())) cnt++;
}
sb = new StringBuilder();
if (i + N <= SIZE) {
for (int x = i; x < i + N; x++) sb.append(map[x][j]);
if (check(sb.toString().toCharArray())) cnt++;
}
}
}
좌표 (i, j)를 기준으로 오른쪽과 밑쪽으로 각각 회문을 확인합니다.
static boolean check(char[] s) {
int left = s.length / 2 - 1, right = s.length % 2 == 0 ? s.length / 2 : s.length / 2 + 1;
while (left >= 0 && right <= s.length - 1) {
if (s[left] != s[right]) return false;
left--;
right++;
}
return true;
}
check 메소드
는 입력받은 문자 배열 s가 회문을 형성하면 true를, 아니면 false를 리턴합니다. 중앙을 기준으로 왼쪽과 오른쪽을 left, right로 설정하고 한 칸씩 떨어뜨리면서 문자열의 끝까지 진행하는 방식으로 회문을 확인합니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
final int SIZE = 8;
for (int tc = 1; tc <= 10; tc++) {
int N = stoi(br.readLine());
char[][] map = new char[SIZE][SIZE];
int cnt = 0;
for (int i = 0; i < SIZE; i++) map[i] = br.readLine().toCharArray();
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
StringBuilder sb = new StringBuilder();
if (j + N <= SIZE) {
for (int y = j; y < j + N; y++) sb.append(map[i][y]);
if (check(sb.toString().toCharArray())) cnt++;
}
sb = new StringBuilder();
if (i + N <= SIZE) {
for (int x = i; x < i + N; x++) sb.append(map[x][j]);
if (check(sb.toString().toCharArray())) cnt++;
}
}
}
System.out.println("#" + tc + " " + cnt);
}
}
static int stoi(String s) {
return Integer.parseInt(s);
}
static boolean check(char[] s) {
int left = s.length / 2 - 1, right = s.length % 2 == 0 ? s.length / 2 : s.length / 2 + 1;
while (left >= 0 && right <= s.length - 1) {
if (s[left] != s[right]) return false;
left--;
right++;
}
return true;
}
}
댓글남기기