본문 바로가기
문제 풀이/SWEA

1215번 - 회문1

by Kim Juhwan 2021. 8. 4.

문제의 저작권은 SW Expert Academy에 있습니다. (출처)

1. 문제
   1-1. 문제 설명
   1-2. 문제 해석
2. 코드
3. 실행시간

 

 

 

 


 

 

1. 문제

1-1. 문제 설명

 

 

1-2. 문제 해석

가로 방향으로 이중 포문 한 번, 세로 방향으로 이중 포문 한 번 사용해서 회문을 찾아야 할 것 같지만

이 문제는 1209번 - Sum 문제처럼 이중 포문 하나로 가로/세로 방향을 탐색할 수 있다.

이 점이 시간 단축을 하는데에 가장 중요한 요소가 아니었나 싶다.

 

그리고 회문 검사를 할 때 앞 글자와 뒤 글자를 하나씩 비교하는 부분이 은근히 헷갈리기 때문에 유의해야 한다.

회문의 첫 번째 글자 좌표, 회문의 길이, 포문 이렇게 3가지만 있으면 회문 검사를 할 수 있다.

 

 

2. 코드

public class Day3_1215_회문1 {
	static final int N = 8;
	static char[][] arr = new char[N][N];

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		for (int tc = 1; tc <= 10; tc++) {
			int len = Integer.valueOf(br.readLine());
			int cnt = 0;

			for (int i = 0; i < N; i++) { // 입력
				String temp = br.readLine();
				for (int j = 0; j < N; j++) {
					arr[i][j] = temp.charAt(j);
				}
			}

			for (int i = 0; i < N; i++) { // 회문 검사
				for (int j = 0; j <= N - len; j++) {
					if(isColPalindrome(i, j, len)) cnt++;
					if(isRowPalindrome(j, i, len)) cnt++;
				}
			}
			
			sb.append("#").append(tc).append(" ").append(cnt).append("\n");
		}
		System.out.println(sb.toString());
	}

	public static boolean isColPalindrome(int y, int x, int len) {
		for (int k = 0; k < len / 2; k++) {
			if(arr[y][x + k] != arr[y][x + len - 1 - k]) return false;
		}
		return true;
	}
	
	public static boolean isRowPalindrome(int y, int x, int len) {
		for (int k = 0; k < len / 2; k++) {
			if(arr[y + k][x] != arr[y + len - 1 - k][x]) return false;
		}
		return true;
	}
}

 

 

3. 실행시간

4등.. ㅠㅠ 정말 적은 차이로 밀려났다.

 

 

 

 


💡 느낀 점 (?)


반응형

'문제 풀이 > SWEA' 카테고리의 다른 글

1218번 - 괄호 짝짓기  (0) 2021.08.05
1216번 - 회문2  (0) 2021.08.04
1213번 - String  (0) 2021.08.03
1210번 - Ladder1  (0) 2021.08.03
1220번 - Magnetic  (0) 2021.08.02

댓글