티스토리 뷰
문제 개요
세로줄과 가로줄의 문제의 조건을 만족하는 경사로의 개수를 찾는 문제입니다.
문제 접근
구현문제입니다. 이 문제를 풀면서 다시한번 구현이 약하다는 것을 느꼈습니다. 단순 구현문제 같은데 사소한 실수가 많아서 테스트를 성공하지 못한 경우가 많았습니다. 핵심은 문제의 조건을 잘 이해하고 이에 맞도록 구현하는 것이라고 생각합니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
static int N;
static int L;
static int[][] map;
static void input() throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String[] firstLine = bf.readLine().split(" ");
N = Integer.parseInt(firstLine[0]);
L = Integer.parseInt(firstLine[1]);
map = new int[N][];
for(int i=0;i<N;i++){
map[i] = Arrays.stream(bf.readLine().split(" "))
.mapToInt(Integer::parseInt)
.toArray();
}
}
static boolean isVecticalOk(int i){
int cur = map[0][i];
int size = 1;
for(int j=1;j<N;j++){
if(map[j][i] - cur == 0){
size++;
continue;
}
if(map[j][i] - cur == 1){
if(size < L){
return false;
}
cur = map[j][i];
size = 1;
continue;
}
if(map[j][i] - cur == -1){
for(int k=0; k<L;k++){
if(j+k >= N){
return false;
}
if(map[j][i] != map[j+k][i]){
return false;
}
}
cur = map[j][i];
j += L-1;
size = 0;
continue;
}
return false;
}
return true;
}
static boolean isHorizontalOk(int i){
int cur = map[i][0];
int size = 1;
for(int j=1;j<N;j++){
if(map[i][j] - cur == 0){
size++;
continue;
}
if(map[i][j] - cur == 1){
if(size < L){
return false;
}
cur = map[i][j];
size = 1;
continue;
}
if(map[i][j] - cur == -1){
for(int k=0; k<L;k++){
if(j+k >= N){
return false;
}
if(map[i][j] != map[i][j+k]){
return false;
}
}
cur = map[i][j];
j += L-1;
size = 0;
continue;
}
return false;
}
return true;
}
static void process(){
int result = 0;
for(int i=0;i<N;i++){
if(isVecticalOk(i)){
result++;
}
if(isHorizontalOk(i)){
result++;
}
}
System.out.println(result);
}
public static void main(String[] args) throws IOException {
input();
process();
}
}
문제
'문제풀이 > 백준' 카테고리의 다른 글
| 15685. 드래곤 커브 (0) | 2024.01.19 |
|---|---|
| 15684. 사다리 조작 (0) | 2024.01.18 |
| 15683. 감시 (0) | 2024.01.16 |
| 14502. 연구소 (0) | 2024.01.15 |
| 16234. 인구 이동 (1) | 2024.01.14 |
