본문 바로가기
python

[PYTHON] leetcode Subrectangle Queries (mid) 문제풀이

디지털노마드 2021. 3. 19.
반응형

[PYTHON] leetcode Subrectangle Queries (mid) 문제풀이

 

leetcode 에서 easy 만 풀다보니 뭔가 계속 허무해서 mideum 문제를 한번 풀어봤다. 이제서야 알았는데 leetcode 문제를 다 풀기 위해서는 돈을 내야 하더라...(ㅠㅠ) 대부분의 문제가 자물쇠로 잠겨 있어서 무료문제만 골라 풀어야 하는 슬픔. 지금까지 경험해본 사이트의 구조상 굉장히 맘에 들기 때문에 언젠가는 프리미엄 버전을 지를 지도 모르겠다. 

 

일단 이 문제는 easy 와는 많이 다르다. 간단하게 설명하자면, class 를 구현하고, 데이터를 초기화 하고, 데이터를 업데이트 하고, 데이터의 값을 가져오는 3가지 기능을 구현한다. 

 

1 2 1

4 3 4

3 2 1

1 1 1 

 

위와 같은 값을 주면서 사각형(rectangle) 을 만들는 것으로 class 를 초기화 한다. 그리고 아래와 같이 일정 범위(역시 사각형, 작은 사각형)를 정해주고 그 안에 값을 업데이트 (ex: 5) 하는 기능이 있다. 

 

1 2 1

4 5 5

3 5 5 

1 1 1 

 

그리고 위와 같은 사각형 데이터를 유지한 상태로 특정 위치의 값, 예를 들어 (0, 1)의 값을 getValue 하면 값을 꺼내서 return 해주면 된다. 여기서 (0, 1) = 4

 

기능들은 그리 어렵지 않지만 여기도 또 나는 헤매게 된다. 바로 self 라는 기능을 몰랐기 때문이다. -_-

 

class SubrectangleQueries:

    def __init__(self, rectangle: List[List[int]]):
        self.targetRec = rectangle

    def updateSubrectangle(self, row1: int, col1: int, row2: int, col2: int, newValue: int) -> None:
        for i in range(row1, row2 + 1):
            for j in range(col1, col2 + 1):
                self.targetRec[i][j] = newValue

    def getValue(self, row: int, col: int) -> int:
            return self.targetRec[row][col]

 

코드라는게 막상 주석 지우고 잘 정리하면 남는게 별로 없다. 몇시간 동안 고생하면 작성한게 왜 이리 짧은지-_-;

일단 이번 코드에서 중요하게 배운것이 바로 

self.targetRec = rectangle

 

self.변수

 

self.변수 로 사용하고 있는 것들이다. __init__ 함수에서 만든 데이터를 다른 함수에서 어떻게 가져와서 쓸까 고민하다가 global 변수로 만들어서 초기화하고 다른 함수에서 가져다가 쓸려고 했는데, 물론 에러가 발생한다. __init__ 함수에서 self 로 변수를 만들어 두면 나중에 이 class 에서 만든 객체내에서 자유롭게 쓸수 있는 것으로 보인다. 

 

 

 

 

반응형

댓글