Spring 한글 깨짐 현상

Spring 한글 깨짐 현상

 

'Spring' 카테고리의 다른 글

Spring 중복 로그인 (세션바인딩 리스너) 정리  (4) 2019.04.26
DI 설정 방법 - xml  (0) 2018.09.06
DI 설정 방법 - JAVA  (0) 2018.09.06
DI 설정 방법 - Java & xml 같이 사용  (0) 2018.09.06

삼성 코딩 모의 테스트 - 등산로 조정

https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PoOKKAPIDFAUq

 

무단 복제를 하면 안되기 때문에 위 링크를 들어가서 회원가입 한 후 문제를 보셔야 합니다.

이 문제는 기본적인 완전 탐색 문제로, 문제를 풀 때 주의해야 할 점은 공사가 가능하여, 등산로를 만들 수 있을 때를 따로 조건을 주어야하고, 이 때 가장 주의 할게 만약 공사가 가능하여 등산로를 깍을 때, 무조건 최대 공사 가능 깊이를 깍는 것이아니라, 필요한 만큼만 깍아야 한다는 점입니다.

 

소스 코드

 

 

삼성 코딩 테스트 준비 - 뱀 3190번

https://www.acmicpc.net/problem/3190

 

그냥 지렁이 게임을 구현하는 거 같았다.

꼬리를 저장하는 vector를 조작하는게 좀 오래 걸렸다.

나머지는 문제에 주어진 규칙을 잘 구현하면 되는 거 같다.

 

시간 제한메모리 제한제출정답맞은 사람정답 비율
1초128MB87171755121019.862%

문제

'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딫히면 게임이 끝난다.

게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다.

뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다.

  • 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다.
  • 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다.
  • 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다.(즉, 몸길이는 변하지 않는다.)

사과의 위치와 뱀의 이동경로가 주어질 때 이 게임이 몇 초(seconds)후에 끝나는지 계산하라.

입력

첫째줄에 N이 주어진다. ( 2 ≤ N ≤ 100 )

다음줄에 사과의 개수 K가 주어진다.( 0 ≤ K ≤ 100 )

그리고 K개의 줄에는 사과의 위치가 주어지는데, 첫번째 숫자는 행(row), 두번째 숫자는 열(column) 위치를 의미한다. 사과들의 위치는 모두 다르며, 맨 위 맨 좌측(1행 1열)에는 사과가 없다.

그리고 뱀의 방향변환 개수 L 이 주어진다. ( 1 ≤ L ≤ 100 )

그리고 L개의 줄에는 뱀의 방향변환 정보가 주어지는데, 숫자 X와 문자 C로 이루어져 있다. X초 후에 왼쪽(C가 'L') 또는 오른쪽(C가 'D')로 방향을 변경 한다는 뜻이다. X는 10,000 이하의 양의 정수이며, 방향 전환 정보는 X가 증가하는 순으로 주어진다.

출력

문제의 정답, 즉 초(seconds) 를 첫째줄에 출력하라.

예제 입력 1

 

예제 출력 1

 

예제 입력 2

 

예제 출력 2

 

예제 입력 3

 

예제 출력 3

 

 

소스 코드

 

 

'알고리즘 > 단순구현' 카테고리의 다른 글

경비원 2564번  (0) 2018.04.09

삼성 코딩 테스트 준비 - 색종이 2630번

https://www.acmicpc.net/problem/2630

 

DFS를 통해 네등분을 하고, 각 조건을 주어 색깔 검사를 하면 되는 문제

 

시간 제한메모리 제한제출정답맞은 사람정답 비율
1초128MB114171756965.933%

문제

아래 <그림 1>과 같이 여러개의 정사각형칸들로 이루어진 정사각형 모양의 종이가 주어져 있고, 각 정사각형들은 하얀색으로 칠해져 있거나 파란색으로 칠해져 있다. 주어진 종이를 일정한 규칙에 따라 잘라서 다양한 크기를 가진 정사각형 모양의 하얀색 또는 파란색 색종이를 만들려고 한다.

img

전체 종이의 크기가 N×N(N=2k, k는 1 이상 7 이하의 자연수) 이라면 종이를 자르는 규칙은 다음과 같다.

전체 종이가 모두 같은 색으로 칠해져 있지 않으면 가로와 세로로 중간 부분을 잘라서 <그림 2>의 I, II, III, IV와 같이 똑같은 크기의 네 개의 N/2 × N/2색종이로 나눈다. 나누어진 종이 I, II, III, IV 각각에 대해서도 앞에서와 마찬가지로 모두 같은 색으로 칠해져 있지 않으면 같은 방법으로 똑같은 크기의 네 개의 색종이로 나눈다. 이와 같은 과정을 잘라진 종이가 모두 하얀색 또는 모두 파란색으로 칠해져 있거나, 하나의 정사각형 칸이 되어 더 이상 자를 수 없을 때까지 반복한다.

위와 같은 규칙에 따라 잘랐을 때 <그림 3>은 <그림 1>의 종이를 처음 나눈 후의 상태를, <그림 4>는 두 번째 나눈 후의 상태를, <그림 5>는 최종적으로 만들어진 다양한 크기의 9장의 하얀색 색종이와 7장의 파란색 색종이를 보여주고 있다.

img

입력으로 주어진 종이의 한 변의 길이 N과 각 정사각형칸의 색(하얀색 또는 파란색)이 주어질 때 잘라진 하얀색 색종이와 파란색 색종이의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. 하얀색으로 칠해진 칸은 0, 파란색으로 칠해진 칸은 1로 주어지며, 각 숫자 사이에는 빈칸이 하나씩 있다.

출력

첫째 줄에는 잘라진 햐얀색 색종이의 개수를 출력하고, 둘째 줄에는 파란색 색종이의 개수를 출력한다.

예제 입력 1

 

예제 출력 1

 

 

소스 코드

 

 

맥주 마시면서 걸어가기 9205번

https://www.acmicpc.net/problem/9205

 

기본적인 BFS()문제인데 맨허튼 거리라서 좀 쉽게 풀린 거같다. 만약 유클리드 거리 방식으로 문제를 풀었다고 하면 식만 좀더 변형하면 될거같다.

 

시간 제한메모리 제한제출정답맞은 사람정답 비율
1초128MB209668053233.671%

문제

송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다. 맥주 한 박스에는 맥주가 20개 들어있다. 목이 마르면 안되기 때문에 50미터에 한 병씩 마시려고 한다.

상근이의 집에서 페스티벌이 열리는 곳은 매우 먼 거리이다. 따라서, 맥주를 더 구매해야 할 수도 있다. 미리 인터넷으로 조사를 해보니 다행히도 맥주를 파는 편의점이 있다. 편의점에 들렸을 때, 빈 병은 버리고 새 맥주 병을 살 수 있다. 하지만, 박스에 들어있는 맥주는 20병을 넘을 수 없다.

편의점, 상근이네 집, 펜타포트 락 페스티벌의 좌표가 주어진다. 상근이와 친구들이 행복하게 페스티벌에 도착할 수 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 t가 주어진다. (t ≤ 50)

각 테스트 케이스의 첫째 줄에는 맥주를 파는 편의점의 개수 n이 주어진다. (0 ≤ n ≤ 100).

다음 n+2개 줄에는 상근이네 집, 편의점, 펜타포트 락 페스티벌 좌표가 주어진다. 각 좌표는 두 정수 x와 y로 이루어져 있다. (두 값 모두 미터, -32768 ≤ x, y ≤ 32767)

송도는 직사각형 모양으로 생긴 도시이다. 두 좌표 사이의 거리는 x 좌표의 차이 + y 좌표의 차이 이다. (맨해튼 거리)

출력

각 테스트 케이스에 대해서 상근이와 친구들이 행복하게 페스티벌에 갈 수 있으면 "happy", 중간에 맥주가 바닥나면 "sad"를 출력한다.

예제 입력 1

 

예제 출력 1

 

 

소스 코드

 

 

경비원 2564번

https://www.acmicpc.net/problem/2564

 

15:26 시작 —> 16:10 종료

단순 구현문제인데, 상점과 동근이의 위치를 y좌표 , x좌표를 똭 준게 아니라, (동-4,서-3,남-2,북-1) 요로코롬 주어서 데이터 입력시 좀 변형을 주어 값을 저장 했다.

예를 들어서 동근이의 좌표를 2 3 을 주었다고 한다면 , 2는 남쪽을 뜻하며, 3은 서쪽으로부터 떨어진 거리를 의미한다. 그래서 저장할 때는 y좌표를 map의 세로 최대 크기M을 저장했고, x좌표는 그대로 3을 저장했다. 그래서 최종적으로 동근이의 위치는 (M, 3) 여기서 M = 5를 의미한다.(예제 기준)

이렇게 동 서 남 북 4가지의 저장 방식을 달리 하니, 동근이의 위치와 상점의 위치의 최단 거리를 구할 때 소스코드 자체가 많이 간결해 졌다(흠 그래도 입력받을때나, 소스 자체가 더러운건 실력이 부족한거같다). 이 의미는 아마 풀어보면 느낌 적인 느낌이 올것이다.

 

시간 제한메모리 제한제출정답맞은 사람정답 비율
1초128MB79040834952.246%

문제

동근이는 무인 경비 회사 경비원으로 항상 대기하고 있다가 호출이 들어오면 경비차를 몰고 그 곳으로 달려가야 한다. 동근이가 담당하고 있는 곳은 직사각형 모양의 블록으로 블록 중간을 가로질러 차가 통과할만한 길이 없다. 이 블록 경계에 무인 경비를 의뢰한 상점들이 있다.

예를 들어 가로의 길이가 10, 세로의 길이가 5인 블록의 경계에 무인 경비를 의뢰한 3개의 상점이 있다고 하자. <그림 1>과 같이 이들은 1, 2, 3으로 표시되어 있고, 동근이는 X로 표시한 위치에 있다.

img

1번 상점에서 호출이 들어 왔을 때 동근이가 블록을 시계방향으로 돌아 이동하면 이동 거리가 12가 된다. 반면 반시계방향으로 돌아 이동하면 이동 거리는 18이 된다. 따라서 동근이가 1번 상점으로 가는 최단 거리는 12가 된다. 마찬가지로 동근이의 위치에서 2번 상점까지의 최단 거리는 6, 3번 상점까지의 최단 거리는 5가 된다.

블록의 크기와 상점의 개수 및 위치 그리고 동근이의 위치가 주어질 때 동근이의 위치와 각 상점 사이의 최단 거리의 합을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 블록의 가로의 길이와 세로의 길이가 차례로 주어진다. 둘째 줄에 상점의 개수가 주어진다. 블록의 가로의 길이와 세로의 길이, 상점의 개수는 모두 100이하의 자연수이다. 이어 한 줄에 하나씩 상점의 위치가 주어진다. 상점의 위치는 두 개의 자연수로 표시된다. 첫째 수는 상점이 위치한 방향을 나타내는데, 1은 블록의 북쪽, 2는 블록의 남쪽, 3은 블록의 서쪽, 4는 블록의 동쪽에 상점이 있음을 의미한다. 둘째 수는 상점이 불록의 북쪽 또는 남쪽에 위치한 경우 블록의 왼쪽 경계로부터의 거리를 나타내고, 상점이 블록의 동쪽 또는 서쪽에 위치한 경우 블록의 위쪽 경계로부터의 거리를 나타낸다. 마지막 줄에는 동근이의 위치가 상점의 위치와 같은 방식으로 주어진다. 상점의 위치나 동근이의 위치는 블록의 꼭짓점이 될 수 없다.

출력

첫째 줄에 동근이의 위치와 각 상점 사이의 최단 거리의 합을 출력한다.

예제 입력 1

 

예제 출력 1

 

 

소스 코드

 

 

삼성 코딩 테스트 기출 - 시험 감독 13458번

https://www.acmicpc.net/problem/13458

 

12:11 시작 —> 12:32 종료

단순 구현문제라 최대한 빨리 푸는게 중요한 문제 같다.

감독관의 수가 int형을 넘어갈 수 있어 long long을 써야 한다는 거 말고는 그다지 함정은 없는거 같음.

 

시간 제한메모리 제한제출정답맞은 사람정답 비율
2초512MB133213331249323.990%

문제

총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다.

감독관은 총감독관과 부감독관으로 두 종류가 있다. 총감독관은 한 방에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 방에서 감시할 수 있는 응시자의 수가 C명이다.

각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.

각 시험장마다 응시생들을 모두 감시해야 한다. 이 때, 필요한 감독관 수의 최소값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다.

셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)

출력

각 시험장마다 응시생을 모두 감독하기 위해 필요한 감독관의 최소 수를 출력한다.

예제 입력 1

 

예제 출력 1

 

예제 입력 2

 

예제 출력 2

 

예제 입력 3

 

예제 출력 3

 

예제 입력 4

 

예제 출력 4

 

예제 입력 5

 

예제 출력 5

 

 

소스 코드

 

 

 

삼성 코딩 테스트 기출 - 주사위 굴리기 14499번

https://www.acmicpc.net/problem/14499

 

14:20 시작 —> 15:41 종료

명령어들을 Queue에 넣고 , 조건문을 통해 이동할 수 있는지 확인하고 , 주사위가 움직일 수 있을 때마다, 값을 swap해주면서 풀었는데, 이런 단순 구현 문제는 너무 오래 걸리는 거 같다. 그나마 한번에 풀어야 빨리 푸는거 같은데, 계속 오타와 하나씩 실수가 겹치면서 더 오래걸리는거 같다.

2시간안에 2문제를 다 풀어야 좋을 텐데, 이러면 1문제 밖에 못풀거 같아서 걱정이다.

 

시간 제한메모리 제한제출정답맞은 사람정답 비율
2초512MB60112139161737.860%

문제

크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 이 지도의 위에 주사위가 하나 놓여져 있으며, 주사위의 전개도는 아래와 같다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다.

 

주사위는 지도 위에 윗 면이 1이고, 동쪽을 바라보는 방향이 3인 상태로 놓여져 있으며, 놓여져 있는 곳의 좌표는 (x, y) 이다. 가장 처음에 주사위에는 모든 면에 0이 적혀져 있다.

지도의 각 칸에는 정수가 하나씩 쓰여져 있다. 주사위를 굴렸을 때, 이동한 칸에 써 있는 수가 0이면, 주사위의 바닥면에 써 있는 수가 칸에 복사된다. 0이 아닌 경우에는 칸에 써 있는 수가 주사위의 바닥면으로 복사되며, 칸에 써 있는 수는 0이 된다.

주사위를 놓은 곳의 좌표와 이동시키는 명령이 주어졌을 때, 주사위가 이동했을 때 마다 상단에 써 있는 값을 구하는 프로그램을 작성하시오.

주사위는 지도의 바깥으로 이동시킬 수 없다. 만약 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 하며, 출력도 하면 안된다.

입력

첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다.

둘째 줄부터 N개의 줄에 지도에 써 있는 수가 북쪽부터 남쪽으로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 주사위를 놓은 칸에 써 있는 수는 항상 0이다. 지도의 각 칸에 써 있는 수는 10을 넘지 않는 자연수이다.

마지막 줄에는 이동하는 명령이 순서대로 주어진다. 동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4로 주어진다.

출력

이동할 때마다 주사위의 윗 면에 써 있는 수를 출력한다. 만약 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 하며, 출력도 하면 안된다.

예제 입력 1

 

예제 출력 1

 

예제 입력 2

 

예제 출력 2

 

예제 입력 3

 

예제 출력 3

 

예제 입력 4

 

예제 출력 4

 

 

소스 코드

 

 

삼성 코딩 테스트 기출 - 톱니바퀴 14891번

https://www.acmicpc.net/problem/14891

 

17:31 시작 —> 19:20 종료

이 문제는 정말... 톱니바퀴를 미리 돌리면 안되는데, rotate 함수를 미리 돌려서 문제를 틀렸다..

그래서 기준이 되는 놈을 맨 마지막에 rotate를 했는데, 이렇게 하니 테스트케이스가 다 맞게 나왔다..

하지만 이거슨 함정.. 기준이 되는 놈말고도 나머지도 check를 한담에 마지막에 한꺼번에 rotate를 해야하는데, 테스트케이스가 맞게 나오니 여기서 멘붕이 와서 찾는데 정말 오래 걸렸다.

너무 안풀려서 도중에 한번 쏵다 지웠다가 마음을 비우고 처음부터 다시 짰는데, 이러니 좀 술술 코드가 짜이더니 맞아부렸다. 와 이 문제 나왔었으면 진짜 클일 날뻔.. 단순 구현 문제같은데 이런거에 너무 약한거 같다 미띤..

 

시간 제한메모리 제한제출정답맞은 사람정답 비율
2초512MB216188670444.784%

문제

총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴가 1번, 그 오른쪽은 2번, 그 오른쪽은 3번, 가장 오른쪽 톱니바퀴는 4번이다.

img

이 때, 톱니바퀴를 총 K번 회전시키려고 한다. 톱니바퀴의 회전은 한 칸을 기준으로 한다. 회전은 시계 방향과 반시계 방향이 있고, 아래 그림과 같이 회전한다.

img

img

톱니바퀴를 회전시키려면, 회전시킬 톱니바퀴와 회전시킬 방향을 결정해야 한다. 톱니바퀴가 회전할 때, 서로 맞닿은 극에 따라서 옆에 있는 톱니바퀴를 회전시킬 수도 있고, 회전시키지 않을 수도 있다. 톱니바퀴 A를 회전할 때, 그 옆에 있는 톱니바퀴 B와 서로 맞닿은 톱니의 극이 다르다면, B는 A가 회전한 방향과 반대방향으로 회전하게 된다. 예를 들어, 아래와 같은 경우를 살펴보자.

img

두 톱니바퀴의 맞닿은 부분은 초록색 점선으로 묶여있는 부분이다. 여기서, 3번 톱니바퀴를 반시계 방향으로 회전했다면, 4번 톱니바퀴는 시계 방향으로 회전하게 된다. 2번 톱니바퀴는 맞닿은 부분이 S극으로 서로 같기 때문에, 회전하지 않게 되고, 1번 톱니바퀴는 2번이 회전하지 않았기 때문에, 회전하지 않게 된다. 따라서, 아래 그림과 같은 모양을 만들게 된다.

img

위와 같은 상태에서 1번 톱니바퀴를 시계 방향으로 회전시키면, 2번 톱니바퀴가 반시계 방향으로 회전하게 되고, 2번이 회전하기 때문에, 3번도 동시에 시계 방향으로 회전하게 된다. 4번은 3번이 회전하지만, 맞닿은 극이 같기 때문에 회전하지 않는다. 따라서, 아래와 같은 상태가 된다.

img

톱니바퀴의 초기 상태와 톱니바퀴를 회전시킨 방법이 주어졌을 때, 최종 톱니바퀴의 상태를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 시계방향 순서대로 주어진다. N극은 0, S극은 1로 나타나있다.

다섯째 줄에는 회전 횟수 K(1 ≤ K ≤ 100)가 주어진다. 다음 K개 줄에는 회전시킨 방법이 순서대로 주어진다. 각 방법은 두 개의 정수로 이루어져 있고, 첫 번째 정수는 회전시킨 톱니바퀴의 번호, 두 번째 정수는 방향이다. 방향이 1인 경우는 시계 방향이고, -1인 경우는 반시계 방향이다.

출력

총 K번 회전시킨 이후에 네 톱니바퀴의 점수의 합을 출력한다. 점수란 다음과 같이 계산한다.

  • 1번 톱니바퀴의 12시방향이 N극이면 0점, S극이면 1점
  • 2번 톱니바퀴의 12시방향이 N극이면 0점, S극이면 2점
  • 3번 톱니바퀴의 12시방향이 N극이면 0점, S극이면 4점
  • 4번 톱니바퀴의 12시방향이 N극이면 0점, S극이면 8점

예제 입력 1

 

예제 출력 1

 

예제 입력 2

 

예제 출력 2

 

예제 입력 3

 

예제 출력 3

 

예제 입력 4

 

예제 출력 4

 

 

소스 코드

 

 

삼성 코딩 테스트 기출 - 경사로 14890번

https://www.acmicpc.net/problem/14890

 

15 : 46 시작 —> 16:55 종료

와.. 이건 내가 푸는데 코드가 무진장 더러웠다. 하나씩 차근차근 조건 주면서 문제를 풀었는데

가로, 세로 따로 검사 하는걸 한번에 하려니깐, 잘 안되서 가로 용 함수, 세로 용 함수 를 나눠서 짜니까

코드의 양이 너무너무너무너무 길게 나왔다.

 

시간 제한메모리 제한제출정답맞은 사람정답 비율
2초512MB128959146445.986%

문제

크기가 N×N인 지도가 있다. 지도의 각 칸에는 그 곳의 높이가 적혀져 있다.

오늘은 이 지도에서 지나갈 수 있는 길이 몇 개 있는지 알아보려고 한다. 길이란 한 행 또는 한 열 전부를 나타내며, 한쪽 끝에서 다른쪽 끝까지 지나가는 것이다.

다음과 같은 N=6인 경우 지도를 살펴보자.

img

이 때, 길은 총 2N개가 있으며, 아래와 같다.

img

길을 지나갈 수 있으려면 길에 속한 모든 칸의 높이가 모두 같아야 한다. 또는, 경사로를 놓아서 지나갈 수 있는 길을 만들 수 있다. 경사로는 높이가 항상 1이며, 길이는 L이다. 또, 개수는 매우 많아 부족할 일이 없다. 경사로는 낮은 칸과 높은 칸을 연결하며, 아래와 같은 조건을 만족해야한다.

  • 경사로는 낮은 칸에 놓으며, L개의 연속된 칸에 경사로의 바닥이 모두 접해야 한다.
  • 낮은 칸과 높은 칸의 높이 차이는 1이어야 한다.
  • 경사로를 놓을 낮은 칸의 높이는 모두 같아야 하고, L개의 칸이 연속되어 있어야 한다.

아래와 같은 경우에는 경사로를 놓을 수 없다.

  • 경사로를 놓은 곳에 또 경사로를 놓는 경우
  • 낮은 칸과 높은 칸의 높이 차이가 1이 아닌 경우
  • 낮은 지점의 칸의 높이가 모두 같지 않거나, L개가 연속되지 않은 경우
  • 경사로를 놓다가 범위를 벗어나는 경우

L = 2인 경우에 경사로를 놓을 수 있는 경우를 그림으로 나타내면 아래와 같다.

img

경사로를 놓을 수 없는 경우는 아래와 같다.

img

위의 그림의 가장 왼쪽부터 1번, 2번, 3번, 4번 예제라고 했을 때, 1번은 높이 차이가 1이 아니라서, 2번은 경사로를 바닥과 접하게 놓지 않아서, 3번은 겹쳐서 놓아서, 4번은 기울이게 놓아서 불가능한 경우이다.

가장 위에 주어진 그림 예의 경우에 지나갈 수 있는 길은 초록색으로, 지나갈 수 없는 길은 빨간색으로 표시되어 있으며, 아래와 같다. 경사로의 길이 L = 2이다.

img

지도가 주어졌을 때, 지나갈 수 있는 길의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다.

출력

첫째 줄에 지나갈 수 있는 길의 개수를 출력한다.

예제 입력 1

 

예제 출력 1

 

예제 입력 2

 

예제 출력 2

 

예제 입력 3

 

예제 출력 3

 

예제 입력 4

 

예제 출력 4

 

 

소스 코드

 

 

+ Recent posts