경험의 기록

문제 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14QpAaAAwCFAYi 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

풀이

// [SWEA] 1215. 회문1 (Java)
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Solution {	
	static Character[][] arr; // 글자판 배열
	static int sum; // 회문의 갯수
	static int l; // 회문의 길이
	
	public static void find(int i, int j, String type) {
		String tmp = "";
		int count = 0;
		
		// 가로 찾기
		if(type.equals("x")) {
			while(count < l) {
				tmp += arr[i][j+count];
				count++;
			}
		}
		// 세로 찾기
		else {
			while(count < l) {
				tmp += arr[j+count][i];
				count++;
			}
		}

		// 문자열 뒤집기
		StringBuffer bf = new StringBuffer(tmp);
		String reverse = bf.reverse().toString();
		
		// 회문 여부 검사
		if(tmp.equals(reverse)) {
			sum++;
		}
	}
	
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		for(int t =0; t<10; t++) {
			l = Integer.parseInt(br.readLine());
			sum = 0; 
			arr = new Character[8][8];
			
			// 글자판 입력
			for(int i=0; i<8; i++) {
				String str = br.readLine();
				for(int j=0; j<8; j++) {
					arr[i][j] = str.charAt(j);
				}
			}

			for(int i=0; i<8; i++) {
				for(int j =0; j <= (8-l); j++) {
					find(i,j,"x"); // 가로찾기
					find(i,j,"y"); // 세로찾기
				}
			}	
			System.out.println("#"+ (t+1) + " " + sum);
		}
	}
}

회문의 길이가 주어지므로

0인덱스 부터 8에서 회문의 길이를 뺀 만큼을 시작인덱스로 정하여

회문 길이만큼 가로, 세로로 합쳐 문자열을 만들어주고

그 문자가 회문인지 확인하면 된다.

 

1. 글자판 입력, 탐색

글자판을 입력해주고

범위만큼 가로, 세로를 한번에 탐색해준다.

함수를 2개 만들어도 되지만 마지막에 타입을 하나 정해서 x, y 타입 처리를 따로 하도록 하였다.

 

2. 회문 여부 판별

type이 x면 가로로 문자열을 합쳐주고,

y면 세로로 문자열을 합쳐준다.

그 후 StringBuffer의 reverse로 문자열을 뒤집고

그 문자열이 기존 문자열과 같은지 판별하였다.

 

 

하지만 여기선 회문의 길이가 8이라 실행시간이 크진 않았지만

 

회문의 길이가 엄청 크면

문자열을 다 합쳐서 뒤집는 방식이 아니라

문자열의 첫번째 문자, 마지막 문자 비교하고,

문자열의 두번째 문자, 마지막 전문자 비교하는 것을 반복하면서

회문이 아니면 즉시 리턴하고 다른 것을 찾도록 하는 것이 더 효율적일 것 같다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading