[Java] SWEA 1215 회문1

Lee GaEun·2024년 10월 28일

[Java] 알고리즘

목록 보기
9/93

1215 회문1 문제 링크

문제분석

  • 회문(回文, palindrome) : "기러기", "토마토", "스위스"와 같이 똑바로 읽어도 거꾸로 읽어도 똑같은 문장이나 낱말

  • 예시 :

  • 위 그림에서 회문 4개를 찾음

제약 사항

  • 테스트 케이스는 총 10개
  • 각 칸의 들어가는 글자는 'A', 'B', 'C' 중 하나
  • 글자판은 항상 8x8 크기
  • ABA, ABBA 모두 회문임, A 또한 길이 1짜리 회문
  • 가로 또는 세로로 이어진 직선 회문만 카운트 (대각선, 'ㄱ'모양 등 X)

입력 조건

  • 첫째 줄 : 찾아야 하는 회문의 길이
  • 둘째 줄 : 8x8 크기의 글자판

출력 조건

  • #부호 + 테스트 케이스 번호 + 공백 + 회문의 개수

#1

  • 8번 반복
    • 8-글자수(N) 만큼 반복
      • 열과 행이 회전문인지 파악
import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{
    public static void main(String args[]) throws Exception
    {
        Scanner sc = new Scanner(System.in);

        for(int test_case = 1; test_case <= 10; test_case++)
        {
            int N = sc.nextInt();
            int answer = 0;

            char[][] palindrome = new char[8][8];

            for (int i=0; i<8; i++) {
                String a = sc.next();
                for(int j=0; j<8; j++) {
                    palindrome[i][j] = a.charAt(j);
                }
            }

            int a=0;
            int b=0;
            for(int y=0; y<8; y++) {
                for (int i = 0; i < (8 - N + 1); i++) {
                    for (int j = 0; j < (N / 2); j++) {
                        if (palindrome[y][i+j] == palindrome[y][i + N -1 -j]) a++;
                        if (palindrome[i+j][y] == palindrome[i + N -1 -j][y]) b++;
                    }
                    if(a == N / 2) answer++; a=0;
                    if(b == N / 2) answer++; b=0;
                }
            }
            System.out.println("#" + test_case + " " + answer);
        }
    }
}
  • 변수명을 대충 만들었더니
    • 반복문이랑 비교문 돌릴 때 헷갈림
    • 검토 시 맞았는지 구분하기 어려움
  • 그래서 생각보다 오래 걸림

  • 성공!

5/1 다시 풀어봄

#2


import java.util.HashMap;
import java.util.Scanner;
import java.io.FileInputStream;

/*
   사용하는 클래스명이 Solution 이어야 하므로, 가급적 Solution.java 를 사용할 것을 권장합니다.
   이러한 상황에서도 동일하게 java Solution 명령으로 프로그램을 수행해볼 수 있습니다.
 */
class Solution
{
    public static void main(String args[]) throws Exception
    {
        Scanner sc = new Scanner(System.in);
        int T;
        T=10;

        for(int test_case = 1; test_case <= T; test_case++)
        {
            int N = sc.nextInt();
            String a;
            char[][] arr = new char[8][8];
            for(int i=0; i<8; i++) {
                a = sc.next();
                for(int j=0; j<8; j++) {
                    arr[i][j] = a.charAt(j);
                }
            }

            int answer = 0;
            boolean cca = true;
            boolean ccb = true;
            for (int i = 0; i < 8; i++) {
                for(int j=0; j<=8-N; j++) {
                    for(int x=0; x<N/2; x++) {
                        if (arr[i][j+x] != arr[i][j+N-1-x]) {
                            cca = false;
                        }

                        if(arr[j+x][i] != arr[j+N-1-x][i]) {
                            ccb = false;
                        }
                    }
                    if(cca) answer++;
                    if(ccb) answer++;
                    cca = true;
                    ccb = true;
                }
            }

            System.out.println("#"+test_case+" "+answer);
        }
    }
}

  • 아니 진짜 바보인게 다른 문제 output 값이랑 비교하면서 대체 어디가 틀린 건지 고민하고 있었음;;;;

  • 뭔가 예전에 풀었던 것보다 더 어려운 방법으로 푼 것 같긴 한데
  • 기본적인 로직은 똑같음
profile
I will give it my all (๑•̀o•́๑)ง

0개의 댓글