알고리즘/항해99

99클럽 코테 스터디 26일차 TIL + 배열(Subrectangle Queries)

IamBD 2024. 6. 14. 13:54

오늘의 과제

리트코드 medium으로 분류된 Subrectangle Queries입니다.

 

이번 유형은 배열 입니다.

문제

https://leetcode.com/problems/subrectangle-queries/description/

 

 

먼저 문제 요구사항 요약입니다.

 

사각형을 정수형 2차원 배열로 주었을 때 특정 좌표의 값을 반환하는 메서드, x,y => x2,y2 까지의 값을 업데이트 하는 메서드 하나를 구현하면 됩니다.

 

사실 설명이라고 할 것 없이 구구단 급의 아주 기초적인 문제라 설명할 게 딱히 없습니다.

 

먼저 초기화입니다. 입력으로 주어진 값을 다른 메서드에 파라미터로 넘기는게 아닌 전역으로 쓰기 위한 초기화를 진행합니다.

int[][] rectangle;

public SubrectangleQueries(int[][] rectangle) {
    this.rectangle = rectangle;
}

 

 

좌표 값과 새로운 값을 받으면 업데이트 해주는 메서드입니다. x1,y1부터 x2,y2까지 그냥 새로운 값으로 바꿔주면 됩니다.

public void updateSubrectangle(int row1, int col1, int row2, int col2, int newValue) {
    for(int i = row1; i <= row2; i++) {
        for(int j = col1; j <= col2; j++) {
            rectangle[i][j] = newValue;
        }
    }
}

 

좌표 값을 반환하는 메서드입니다. 해당 사각형 배열은 전역 변수로 세팅했으니 그저 반환하면 됩니다.

public int getValue(int row, int col) {
    return rectangle[row][col];
}

 

 

코드입니다.

class SubrectangleQueries {

    int[][] rectangle;

    public SubrectangleQueries(int[][] rectangle) {
        this.rectangle = rectangle;
    }
    
    public void updateSubrectangle(int row1, int col1, int row2, int col2, int newValue) {
        for(int i = row1; i <= row2; i++) {
            for(int j = col1; j <= col2; j++) {
                rectangle[i][j] = newValue;
            }
        }
    }
    
    public int getValue(int row, int col) {
        return rectangle[row][col];
    }
}

/**
 * Your SubrectangleQueries object will be instantiated and called as such:
 * SubrectangleQueries obj = new SubrectangleQueries(rectangle);
 * obj.updateSubrectangle(row1,col1,row2,col2,newValue);
 * int param_2 = obj.getValue(row,col);
 */

 

배운 점

 

사실 오늘 문제는 밸런스 조절에 실패했는지 구구단급으로 갑자기 너무 쉬워진 느낌이었습니다. 그래서 문제에 대한 회고는 딱히 적을 게 없고 최근 있었던 회사 신입에 대한 교육 회고를 적을까 합니다.

 

요리를 오래 하다가 뒤늦게 개발자로 직종 변경을 한 신입 친구가 있습니다. 친구라 하기엔 저보다 연장자라 어울리는 표현은 아니지만 하고자 하는 열정과 배움에 대한 의지는 매우 강력합니다.

 

사실 이전에 이 친구 교육에 관한 얘기를 살짝 얘기했었는데 최근 보니 List와 Map 외에 자료구조에 대해 아예 무지한 친구였습니다. 특정 과제를 주고 구현한 부분에 대해 코드 리뷰를 진행하면 계속 막히길래 추궁하면  "사실 구글링 결과를 붙여넣어서 사실 어떻게 동작하는지는 잘 모르겠습니다"라고 실토를 합니다. 그 때마다 심호흡을 통해 감정을 추스리기를 반복하다 현재 이 직원에게는 업무가 아닌 기본기가 절실히 필요하다고 판단했습니다.

 

해당 직원에게는 자존심 상하는 일이 될 수는 있으나 제가 알고리즘 문제를 풀며 느꼇던 지식을 이 직원도 느끼길 바라는 마음으로 즉각 실무에서 배제시키고 "업무 시간이어도 좋으니 프로그래머스 문제를 풀고 해당 문제에 대한 설명을 준비해라" 는 지시를 내렸습니다. 해당 문제들은 Lv.0 ~ Lv.1 사이에 문제로 정말 기본적인 배열이나 자료 구조를 사용하는 유형들이었습니다.

 

사실 기본기가 전혀 없기에 최소 2주 이상은 예상하였으나 주말에도 혼자서 풀고 왔는지 일주일도 안되는 시간에 모두 풀고 설명할 준비 되었으니 시간되면 확인을 부탁한다고 하더군요. 개발자로 시작하기 전 커뮤니케이션이 많이 필요한 직종에 있던건 아니었는지 설명하는 능력이 아직은 매우 부족하지만 정말 다행히 문제 하나하나 직접 고민하고 풀었으며 해당 자료 구조에 대해 이해했다. 라는 느낌을 받았으며 해당 직원 스스로도 Set이라는 자료 구조를 처음 봤다, Arrays.Sort라는 API를 처음 봤다 등 기본적인 부분에 대해 많이 배운 것 같았습니다.

 

다양한 IT 스타트업이나 서비스 기업은 워낙 입사의 문턱이 높기 때문에 위와 같은 사례가 있는지는 잘 모르겠으나 입사 희망자들에 대한 커트라인 혹은 신입 직원에 대한 교육 커리큘럼에 기본기에 대한 필요성을 느낀 경험이었습니다.

 

이미 험난한 문턱을 뚫고 뛰어난 동료들과 함께하는 조직도 있겠지만 아직은 모두 부족하여 상호간의 발전을 도모해야 하는 조직도 있습니다. 저 또한 조직의 상향 평준화를 위해 해당 사례에 대해 입사 및 신입 교육에 적용을 본사에 요청하였으며 다행히 잘 반영되어 기회가 온다면 관련 교육을 진행하며 한 번 더 스스로 배울 수 있는 시간이 있었으면 좋겠습니다.

 

 

오늘의 한줄평

상향 평준화가 빠를까, 이직이 빠를까