Jun's Development Journey

[SWEA] 1215. [S/W 문제해결 기본] String - 회문1 본문

SWEA/Intermediate

[SWEA] 1215. [S/W 문제해결 기본] String - 회문1

J_Jayce 2019. 8. 2. 13:39

문제

 

https://www.swexpertacademy.com/main/learn/course/lectureProblemViewer.do

 

SW Expert Academy

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

www.swexpertacademy.com

 

 

풀이

이 문제는 전형적인 문자열 문제이다. 내가 푼 방식은 가로 문자열은 처음에 받은 8개의 문자열을 순서대로 이용하면 되지만 세로는 그렇지 않다. 문자열 함수를 최대한 이용하기 위해서 세로 문자열은 열첨자를 고정하고 행첨자를 증가시키면서 문자열을 생성해서 회문의 갯수를 찾는 방식으로 구현했다. 세로 문자열 방식이 내가 한 방식이 효과적인 방법인지는 다른 방법을 봐보지 않아서 정확하는 모르겠지만 내 방식대로 풀어봤던 문제이다.

 

 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import java.util.*;
 
public class Solution {
    static Scanner scan = new Scanner(System.in);
    static String[] sarr = new String[8];
    static int len = 0;
    static boolean is_palindrome(String test) {
        boolean chk = true;
        int len = test.length();
        for(int i=0;i<len/2;i++) {
            if(test.charAt(i)!=test.charAt(len-i-1)) {
                chk = false;
                break;
            }
        }
        return chk;
    }
    static int get_pali_num_row(int row) {//가로 문자열에서 탐색
        int answer = 0;
        String tmp = sarr[row];
        for(int i=0;i<=tmp.length()-len;i++) {
            if(is_palindrome(tmp.substring(i,i+len)))
                answer++;
        }
        return answer;
    }
    static int get_pali_num_col(int col) {//세로 문자열에서 탐색
        int answer = 0;
        String tmp = "";
        for(int i=0;i<8;i++)//열 번호를 받고 행 번호를 증가시키면서 세로 문자열을 생성
            tmp+= sarr[i].charAt(col);
        
        for(int i=0;i<=tmp.length()-len;i++) {
            if(is_palindrome(tmp.substring(i,i+len)))
                answer++;
        }
        return answer;
    }
    static void solution() {
        for(int i=1;i<=10;i++) {
            int sum=0;
            len = scan.nextInt();
            for(int j=0;j<8;j++)//문자열 입력 받음
                sarr[j] = scan.next();
            
            for(int j=0;j<8;j++)//가로 문자열과 세로 문자열 탐색해서 회문 갯수 찾아 더해줌
                sum +=(get_pali_num_row(j)+get_pali_num_col(j));
            
            System.out.println("#"+i+" "+sum);
        }
    }
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        solution();
    }
 
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter