SWEA 1215번 회문1 Java

2022. 9. 21. 22:06· 알고리즘/SWEA

주어진 2차원 배열을 돌면서 회문이 몇개 있는지 구하는 문제

===>  구해야 하는 회문의 길이를 주고 가로, 세로 총 몇개의 회문이 있는지 구해야 함

회문 문제에서 핵심은 전체 배열을 탐색할 필요 없이

행 또는 열 기준으로 ( 배열의 길이 - 구해야 할 회문의 길이 + 1 ) 만큼 탐색해주기

예를 들어 4글자 회문을 구하면 1번째 - 4번째, 2번째 - 3번째 가 같은지만 보면 되기 때문에

다시 for문을 돌려서 회문의 길이/2 만큼 비교해주자

<코드>


import java.util.Scanner;

public class Solution {

	/*
	 * 회문 문제 공통 꼭 외우자 배열 탐색은 행 or 열 기준 -> 배열 길이 - 회문 길이 + 1 까지만 보면 됨 회문 문자열인지 아닌지
	 * 판단하려면 그 문자열을 반 접어서 비교한다고 생각 회문길이/2 횟수만큼 비교
	 */

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		for(int tc = 1; tc <= 10; tc++) {
			int len = sc.nextInt(); //회문의 길이
			
			char [][] map = new char [8][8];
			
			//배열 채워주기
			for(int i=0; i<map.length; i++) {
				String str = sc.next();
				for(int j=0; j<map[i].length; j++) {
					map[i][j] = str.charAt(j);
				}
			}
			//배열 탐색 후 flag의 true 여부에 따라서 cnt 증가 시켜줄 것
			boolean flag;
			int cnt = 0;
			
			//행 기준 탐색
			for(int i=0; i<map.length; i++) {
				for(int j=0; j<map.length-len+1; j++) {
					flag = true;
					for(int k=0; k<len/2; k++) 
						if(map[i][j+k]!=map[i][j-k+len-1])
							flag = false;
						
						if(flag) cnt ++;
				}
			}
			
//	          //가로 
//	          for(int i = 0; i < map.length; i++) {
//	              for(int j = 0; j < map.length - len + 1; j++) {
//	                  flag = true;
//	                  for(int h = 0; h < len / 2; h++)
//	                      if(map[i][j + h] != map[i][j - h + len - 1])
//	                          flag = false;
//	                  if(flag) cnt++;
//	              }
//	          }
	          
			
		

			
			//열 기준 탐색
			for(int i=0; i<map.length-len+1; i++) {
				for(int j=0; j<map.length; j++) {
					flag = true;
					for(int k=0; k<len/2; k++) 
						if(map[i+k][j]!=map[i-k+len-1][j])
							flag = false;
						
						if(flag) cnt ++;
					
				}
			}
			

//	          //세로 
//	          for(int i = 0; i < map.length - len + 1; i++) {
//	              for(int j = 0; j < map.length; j++) {
//	                  flag = true;
//	                  for(int h = 0; h < len / 2; h++)
//	                      if(map[i + h][j] != map[i - h + len - 1][j])
//	                          flag = false;
//	                  if(flag) cnt++;
//	              }
//	          }
			
			
			System.out.println("#"+tc+" "+cnt);
			
			
			
		}
		

	}

}

가로, 세로 기준으로 for문을 돌릴 때 괄호를 잘못 묶어줘서 계속 fail이 떴던 문제

회문의 개념과 구하는 방식만 알면 어렵지 않은 문제였음

괄호로 묶는 것 주의하기!!!!

저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > SWEA' 카테고리의 다른 글

[SWEA] 13218.조별과제.java  (0) 2023.05.25
[SWEA] 12368. 24시간.java  (0) 2023.05.25
SWEA 9229 한빈이와 Spot Mart Java  (0) 2022.12.25
SWEA 2001 파리퇴치 Java  (0) 2022.12.16
SWEA 1954 달팽이 숫자 Java  (0) 2022.12.16
'알고리즘/SWEA' 카테고리의 다른 글
  • [SWEA] 12368. 24시간.java
  • SWEA 9229 한빈이와 Spot Mart Java
  • SWEA 2001 파리퇴치 Java
  • SWEA 1954 달팽이 숫자 Java
개발자 정지은
개발자 정지은
프로그래밍 공부 기록
개발자 정지은
PROGRAMMING DIARY
개발자 정지은
전체
오늘
어제
  • 분류 전체보기 (107)
    • 알고리즘 (49)
      • BeakJoon (27)
      • SWEA (9)
      • Inflearn (2)
      • CodeSignal (1)
      • Programmers (10)
    • FE (0)
      • Javascript (0)
      • React (0)
    • BE (0)
    • CS공부 (13)
      • Database (7)
      • IT기본지식 (6)
    • TIL (45)
      • 프로그래머스 데브코스 (45)
    • Project (0)
      • DreamHi (0)
      • 인사관리시스템 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 국비지원교육
  • 프론트엔드
  • 프로그래머스 데브코스
  • 자바스크립트
  • 피그마
  • React.JS
  • ReactNative
  • javascript
  • 리액트
  • 알고리즘
  • 코딩부트캠프
  • figma

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
개발자 정지은
SWEA 1215번 회문1 Java
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.