Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 외로운 픽셀 I

<시간/>

흑백 픽셀로 구성된 사진이 있다고 가정하고 검은색 외로운 픽셀의 수를 찾아야 합니다. 여기에서 그림은 흑백 픽셀 각각에 대해 'B'와 'W'로 구성된 2D 문자 배열로 표시됩니다.

검은색 외로운 픽셀은 실제로 같은 행과 같은 열에 다른 검은색 픽셀이 없는 특정 위치에 있는 'B'입니다.

입력이 다음과 같은 경우 -

W

출력은 3이 됩니다. 3개의 'B'가 모두 검은색 외로운 픽셀이기 때문입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • n :=사진 크기

  • m :=(n이 0이 아니면 열 크기, 그렇지 않으면 0)

  • 크기가 n

    인 두 개의 배열 행과 열을 정의합니다.
  • ret :=0, 첫 번째 행 :=0

  • initialize i :=0의 경우, i

    • j 초기화의 경우:=0, j

      • 그림[i, j]이 'B'와 같으면 -

        • picture[0, j] <'Y'이고 picture[0, j]가 'V'와 같지 않으면 -

          • (그림[0, j] 1씩 증가)

        • i가 0과 같으면 -

          • (firstRow 1 증가)

        • 그렇지 않으면 그림[i, 0] <'Y'이고 그림[i, 0]이 'V'와 같지 않으면 -

          • (그림[i, 0]을 1씩 증가)

  • initialize i :=0의 경우, i

    • j 초기화의 경우:=0, j

      • picture[i, j] <'W'이고 (picture[0, j]가 'C'와 같거나 picture[0, j]가 'X'와 같으면 -

        • i가 0과 같으면 -

          • ret :=(ret + firstRow가 1과 같으면 1, 그렇지 않으면 0)

        • 그렇지 않으면 그림[i, 0]이 'C'와 같거나 그림[i, 0]이 'X'와 같을 때 -

          • (ret 1 증가)

  • 리턴 렛

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int findLonelyPixel(vector<vector<char>>& picture) {
      int n = picture.size();
      int m = n ? picture[0].size() : 0;
      vector<int< row(n);
      vector<int< col(m);
      int ret = 0;
      int firstRow = 0;
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            if (picture[i][j] == 'B') {
               if (picture[0][j] < 'Y' && picture[0][j] != 'V'){
                  picture[0][j]++;
               }
               if (i == 0)
                  firstRow++;
               else if (picture[i][0] < 'Y' && picture[i][0] != 'V') {
                  picture[i][0]++;
               }
            }
         }
      }
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < m; j++) {
            if (picture[i][j] < 'W' && (picture[0][j] == 'C' || picture[0][j] == 'X')) {
               if (i == 0)
                  ret += firstRow == 1 ? 1 : 0;
               else if (picture[i][0] == 'C' || picture[i][0] == 'X')
                  ret++;
            }
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<vector<char>> v = {{'W','W','B'},{'W','B','W'},{'B','W','W'}};
   cout << (ob.findLonelyPixel(v));
}

입력

{{'W','W','B'},{'W','B','W'},{'B','W','W'}}

출력

3