완전탐색과 이동탐색을 합친 문제다 어렵지는 않았는데 해당 기능을 자주 이용할 수 있을것같아 기록함.
N과 M이 주어지고 또 N * M의 문자열이 주어지면 가로, 세로, 대각선 뱡향으로 도중에 방향을 틀지 않고 인접하여 나오는 ‘LEE’ 의 개수를 구하는 프로그램을 작성해보세요.
입력 형식
첫 번째 줄에 정수 N과 M이 공백을 사이에 두고 주어집니다.
- 1 ≤ N, M ≤ 50
출력 형식
첫 번째 줄에 모든 'LEE'의 개수를 출력합니다.
입출력 예제
예제1
입력:
4 6
TAEHGI
EELVWE
LEELSE
HBLUEL
출력:
6
예제 설명
아래 그림과 같이 'LEE'의 개수는 총 6개 입니다.
내 코드
import java.util.*;
public class Main {
static int n;
static int m;
static String[][] arr;
static int[] dx = new int[]{-1,-1,0,1,1,1,0,-1};
static int[] dy = new int[]{0,1,1,1,0,-1,-1,-1};
static boolean inRange(int r, int c, int d){
return r >= 0 && r < n && c >= 0 && c < m;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
arr = new String[n][m];
for(int i = 0; i < n; i++){
String[] temp = sc.next().split("");
for(int j = 0; j < temp.length; j++){
arr[i][j] = temp[j];
}
}
int cnt = 0;
for(int i = 0; i < n; i++){ //행
for(int j = 0; j < m; j++){ //렬
for(int k = 0; k < dx.length; k++){
int r = i; //현재 행
int c = j; //현재 열
StringBuilder sb = new StringBuilder();//방향
for(int l = 0; l < 3; l++){
if(inRange(r, c, k)){
sb.append(arr[r][c]);
r += dx[k];
c += dy[k];
}else{
break;
}
}
if(sb.toString().equals("LEE"))cnt++;
}
}
}
System.out.print(cnt);
}
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[코드트리] 스승의 은혜3 (1) | 2023.05.04 |
---|---|
[코드트리] 상해버린 치즈 (0) | 2023.04.29 |
[코드트리] 거울에 레이저 쏘기 2 (0) | 2023.04.21 |
[코드트리] 빙빙 돌며 숫자 사각형 채우기 (0) | 2023.04.20 |
[코드트리] 작은 구슬의 이동 (0) | 2023.04.20 |