Matrix 알고리즘 문제

김동하·2023년 1월 29일
0

알고리즘

목록 보기
48/49

코테 봤는데 이차원 배열 문제를 못 풀었다. 원래 그림 문제 약한데 그림 나와서 당황하고 접근 이상하게 해서 시간 다 날리고 흑흑. 뭔가 어렵지만 풀 수 있을 거 같은데 못 풀어서 하루종일 그 문제 생각만 나고 화나고 그래서 다음 날 일어나자마자 스벅와서 커피 마시고 풀었다 키키

문제

input으로 tress 2차원 배열이 들어온다. 각 좌표엔 나무가 있는데 나무가 있는 좌표 오른쪽 모든 행, 아래쪽 모든 열로 그린벨트가 지정된다. [4, 4]에 가까운 좌표가 있을 수록 그린벨트도 줄어듦. 대충 아래와 같음.

그래서 마지막에 경계선을 만든 나무의 개수를 구하면 된다.

풀이

면저 배열을 90도로 돌리기 위해서 tress 정렬하고 board로 배열 만들어서 배열을 다시 짰다. 그리고 for loop 돌면서 나무가 있는 부분을 표시한다.

아래처럼 배열을 바꾼다.

이제 1을 만난 곳을 기준으로 board의 right, down을 모두 변경한다.

down을 현재 열(row), right를 현재 행(col)로 잡고 1을 만나면 끝까지 돌면서 2로 바꾼다. 첫 번째 while이 돌고 나서 right를 다시 j로 초기화를 안 해줘서 30분 삽질함.. 지금 다시 보니까 down은 초기화 할 필요가 없네.

그리고 변경된, 즉 그린벨트 안쪽으로 지정된 좌표를 만나면 그 열을 탐색하지 않는다.

이렇게 변경된다. 가장 바깥 쪽에 있는 나무(1)를 중심으로 그린벨트(2) 구역이 만들어지면 안쪽에 있는 나무까지 for loop이 돌지 않는다. 여기서 그냥 안쪽 1까지 다 2로 바꿔서 나중에 좌표가 1인 개수만 셀까했는데 그냥 뒀다.

그리고 행을 검사하면서 1인 수만 찾으면 된다.

하... 생각 좀만 했음 풀 수 있었는데... 어제의 나... 반성해라

profile
프론트엔드 개발

0개의 댓글