[Swift] [62일차] 2125_LEET 은행

·2025년 2월 7일
0

SwiftAlgorithm

목록 보기
65/105
post-thumbnail

2125. Number of Laser Beams in a Bank


문제 설명

  1. 나온것처럼 2차원 배열로 경보장치가 주어진다.
  2. 가장 가까운층으로 쏟아내니까 그 레이저 개수를 구하면된다.
  3. 1층에서 2층거쳐서 3층 워프는 X
  4. 사진과 같음

문제 풀이

  1. 주어지는 배열이 ["011001","000000","010100","001000"]
  2. 이런식으로 주어지면 이게 레이저 개수는 사실 1의 개수 * 가까운 층의 개수 +.. 반복이다
  3. 여기 예시로 보면 1층은 1개 2층은 2개 4층은 3개 니까 1X2 + 2X3 = 8

filter 사용해서 1개수 있을때만 이제 유효한 층별로 담긴 배열을 return 해주게 했다.

class Solution {
    func numberOfBeams(_ bank: [String]) -> Int {
        var answer = 0

        var countingCCTV = [Int]()
if bank.count == 1 {
            return 0
        }
        for row in bank {
            let cnt = row.filter { $0 == "1" }.count // 보안장치의 개수
            if cnt > 0 {
                countingCCTV.append(cnt)
            }
        }

        if countingCCTV.count == 0 {
            return 0
        }
       for i in 0 ..< countingCCTV.count - 1 {
           answer += (countingCCTV[i] * countingCCTV[i + 1])
       }
        return answer
    }
}

그런데도 계속 에러가 뜨니까 아래와 같은 예외처리 2개를 추가해준 것이다.

if bank.count == 1 {
            return 0
        }

if countingCCTV.count == 0 {
            return 0
        }

타인의 코드

class Solution {
    func numberOfBeams(_ bank: [String]) -> Int {
        var prev = 0
        var lasers = 0

        for row in bank {
            var curr = 0
            for char in row {
                curr += char == "1" ? 1 : 0
            }
            
            if curr > 0 {
                lasers += prev * curr
                prev = curr
            }
        }

        return lasers
    }
}

가장 효율 좋은 코드인데, 내가 초반부에 이렇게 풀다가 좀 틀었었다.

if curr > 0 {
                lasers += prev * curr
                prev = curr
            }

이 부분이 헷갈려서였다. 첫항은 어떻게? + 커서의 초기값은 어떻게 해야하지? , prev의 초기값을 0으로해주면 어처피 곱했을때도 문제없으니까 이렇게 해줬다.

profile
기억보단 기록을

0개의 댓글