-
Q. 1215. 회문(D3)코딩테스트/SWEA_Java 2023. 5. 11. 16:25
0. 문제
D3 난이도의 문제이고, 격자형 그래프를 활용한 구현 문제라고 생각된다.
N이 주어지고 문자가 적혀있는 격자형 그래프가 주어진다.
격자형 그래프의 가로 / 세로 N개의 문자열을 뽑았을 때
똑바로/거꾸로 읽어도 똑같은 단어의 경우의 수를 구하는 문제이다.
1. 풀이
1) 격자형 그래프를 두 개 저장하는데, 하나는 그대로 나머지는 90도 돌린 방향으로 저장한다.
(가로 / 세로 모두를 고려 해야 하므로)
2) 나올 수 있는 모든 문자열에 대해 회문 문자인지 판별한다.
(만약 N이 홀수인 경우 ex.4 모든 문자를 비교해야 하지만, 5인 경우 1 2번째와 4 5번째 문자만 비교하면 된다.)
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Solution { static BufferedReader br; static StringTokenizer st; static StringBuilder sb = new StringBuilder(); static char[][] inputArrHorizon; static char[][] inputArrVertical; static int N; public static void input() throws IOException { N = Integer.parseInt(br.readLine()); inputArrHorizon = new char[8][]; inputArrVertical = new char[8][8]; for (int i = 0; i < 8; i++) { inputArrHorizon[i] = br.readLine().toCharArray(); } for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { inputArrVertical[i][j] = inputArrHorizon[j][i]; } } } public static void pro(int tc) { int res = 0, cnt = 0;; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8 - N + 1; j++) { if (compare(inputArrHorizon[i], j)) res++; if (compare(inputArrVertical[i], j)) res++; } } sb.append(String.format("#%d %d\n", tc, res)); } public static boolean compare(char[] Arr, int startIdx) { for (int i = 0; i < N/2 ; i++) { if (Arr[startIdx + i] != Arr[startIdx + N - i - 1]) { return false; } } return true; } public static void main(String[] args) throws Exception { // br = new BufferedReader(new InputStreamReader(new FileInputStream("res/input.txt"))); br = new BufferedReader(new InputStreamReader(System.in)); int T = 10; for (int tc = 1; tc <= T; tc++) { input(); pro(tc); } System.out.println(sb); } }
2. 시간복잡도 계산
1) 문자열 저장 - O(8 x 8)
2) 풀이 2번 - O(2 x 8 x (8-N))
따라서 시간복잡도는 상수 시간 범위 내에서 충분히 해결할 수 있다.
반응형'코딩테스트 > SWEA_Java' 카테고리의 다른 글
Q. 6190. 정곤이의 단조 증가하는 수(D3) (0) 2023.05.13 Q. 4615. 재미있는 오셀로 게임(D3) (0) 2023.05.12 Q. 1860. 진기의 최고급 붕어빵(D3) (2) 2023.05.10 Q. 1225. 암호생성기(D3) (0) 2023.05.09 Q 1859. 백만 장자 프로젝트(D2) (2) 2023.05.08