문제링크: https://leetcode.com/problems/number-of-laser-beams-in-a-bank/description/
보안 장치가 작동되는 은행. 은행의 평면도를 나타내는 문자열 bank가 주어지며, bank[i]는 '0'과'1'로 구성된 i번째 행을 의미한다. '0'은 비어있는 곳이고 '1'은 보안 장치가 있음을 의미한다.
아래와 같은 조건을 만족하면 두 장치 사이에 하나의 레이저를 형성한다.
- 두 장치가 다른 행에 위치해 있을 때
- 장치가 있는 행 사이의 어떤 행도 보안 장치가 없을 때
은행안에 형성된 총 레이저의 개수를 반환하라.
Example 1:
Input: bank = ["011001","000000","010100","001000"]
Output: 8
Example 2:
Input: bank = ["000","111","000"]
Output: 0
Explanation: 보안장치가 존제하는 서로다른 두행이 될 수 없으므로
- m == bank.length
- n == bank[i].length
- 1 <= m, n <= 500
- bank[i][j] is either '0' or '1'
단순히 생각하면 직전 행의 보안 장치의 개수 * 보안장치가 존제하는 현제 행의 보안장치 개수로 생각할 수 있었다. 그렇다면 문제를 해결하기 위해 필요한 조건은 아래의 세가지라고 생각했다.
- 행의 보안장치 개수를 파악하는 것.
- 직전 행의 보안장치 개수를 기억하는 것.
- 보안장치가 없는 행을 넘기는 것.
코드:
class Solution {
public int numberOfBeams(String[] bank) {
int preFloor = 0;
int nowFloor = 0;
int ans = 0;
for(String f : bank){
nowFloor = 0;
for(int i=0; i<f.length(); i++){
if(f.charAt(i)=='1'){
nowFloor++;
}
}
if(nowFloor!=0){
ans += nowFloor*preFloor;
preFloor = nowFloor;
}
}
return ans;
}
}
간단한 원리의 문제라 다른 사람들의 풀이 또한 비슷 하였다.