본문 바로가기
알고리즘 문제풀이/백준

[백준 148990] 경사로

by m2162003 2021. 2. 25.

www.acmicpc.net/problem/14890

 

14890번: 경사로

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

www.acmicpc.net

구현문제

실전에서 나오면 백퍼 틀림 ㅋㅎㅋㅎ 괜히 골3이 아녔다.

 

알고리즘은 없고 구현 조건이 까다롭다.

 

처음에 row, col따로 함수를 만들었는데 그러지 않고 transpose를 해서 함수 하나로 돌리는게 낫다.

for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < n; j++)
    {
      scanf("%d", &arr[i][j]);
    }
  }

  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < n; j++)
    {
      arr[i + n][j] = arr[j][i];
    }
  }
  // 기존 배열 아래에 row-col이 뒤집힌 배열을 둔다.

 

그리고 연속되는 배열 길이(?)가 중요한 문제는 false인걸찾기보다

true인 경우를 찾아야한다.

즉, 배열 체크 전 디폴트를 true로 두고 false를 찾기보다

디폴트를 false로 두고 true인지 여부를 확인하는게 낫다.

 

그래서 solve함수에서 마지막에 true여부를 판단한다.

 if (col == n - 1 && len >= 0)
      sum++;

 

배열은 총 3가지 경우가 있다.

평행로

오르막길

내리막길

 

평행로의 경우엔 문제가 없다.

오르막길의 경우엔 차이가 1이어야 하며 여태 평행로의 길이가 l이상이어야 한다.

내리막길의 경우엔 앞으로 올 평행로의 길이가 l이상이어야 한다.

내리막길 확인이 조금 까다로운데 이것을 확인하기 위해 내리막길의 경우 len = -l+1로 두고 평행로의 길이가 l-1번 등장하는지 확인한다.

#include <stdio.h>

using namespace std;

int n, l;
int arr[200][100];

int solve()
{
  int sum = 0;
  int row, col;
  for (row = 0; row < n * 2; row++)
  {
    int len = 1;
    for (col = 0; col < n - 1; col++)
    {
      if (arr[row][col] == arr[row][col + 1])
      {
        len++;
      } //오르막길
      else if (arr[row][col] + 1 == arr[row][col + 1] && len >= l)
      {
        len = 1;
      } //내리막길
      else if (arr[row][col] == arr[row][col + 1] + 1 && len >= 0)
      {
        len = -l + 1;
      }
      else
        break;
    }
    if (col == n - 1 && len >= 0)
      sum++;
  }
  return sum;
}

int main(void)
{
  scanf("%d%d", &n, &l);

  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < n; j++)
    {
      scanf("%d", &arr[i][j]);
    }
  }

  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < n; j++)
    {
      arr[i + n][j] = arr[j][i];
    }
  }

  int result = solve();
  printf("%d", result);
  return 0;
}

 

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 16986]인싸들의 가위바위보  (0) 2021.03.01
[백준 11652] 카드  (0) 2021.02.25
[백준 15591] Moo Tube  (0) 2021.02.17
[백준 1339] 단어 수학  (0) 2021.02.09
[백준 11723] 집합  (0) 2021.02.06

댓글