이번 주는 다른 주에 비해 쉬운 난이도의 문제가 꽤 있어서 좋았다 😊
하지만 이에 안주하지 않고 꾸준히 과제에 임하는 스터디원들을 보며,
나 역시 평소보다 나태해지지 말자 마음먹었다.
현재 위치와 같은 색을 가진 인접한 칸(상·하·좌·우)의 개수를 구하는 문제
감사히도 문제 작성자가 의사코드를 알려주어 예상보다 수월하게 풀 수 있었다.
문제에 언급된 풀이방법은 아래와 같다.
1. 정수를 저장할 변수 n을 만들고 board의 길이를 저장합니다.
2. 같은 색으로 색칠된 칸의 개수를 저장할 변수 count를 만들고 0을 저장합니다.
3. h와 w의 변화량을 저장할 정수 리스트 dh, dw를 만들고 각각 [0, 1, -1, 0], [1, 0, 0, -1]을 저장합니다.
4. 반복문을 이용해 i 값을 0부터 3까지 1 씩 증가시키며 아래 작업을 반복합니다.
4-1. 체크할 칸의 h, w 좌표를 나타내는 변수 h_check, w_check를 만들고 각각 h + dh[i], w + dw[i]를 저장합니다.
4-2. h_check가 0 이상 n 미만이고 w_check가 0 이상 n 미만이라면 다음을 수행합니다.
4-2-a. board[h][w]와 board[h_check][w_check]의 값이 동일하다면 count의 값을 1 증가시킵니다.
5. count의 값을 return합니다.


def solution(board, h, w):
n = len(board) # 1. board의 길이를 저장 ## 보드판 범위 밖을 탐색하는 걸 막기위해, 이차원배열을 n에 넣을 경우 h_check w_check와 값 비교 불가능 하므로 len() 사용 이후 보드 크기를 n에 저장
count = 0 # 2. 같은 색으로 색칠된 칸의 개수
answer = count
dh, dw =[0, 1, -1, 0], [1, 0, 0, -1] # 3. h와 w의 변화량 // 가로세로
for i in range(0, 4): # 4. 반복문 ## 상하좌우를 확인하며 같은색으로 칠해진 칸 찾기
h_check, w_check = h + dh[i], w + dw[i] # 4-1 체크할 칸의 h, w 좌표를 나타내는 변수
if n > h_check >= 0 and n > w_check >= 0: # 4-2 지금 체크한 h w 범위가 0이상 n 미만일때만
if board[h][w] == board[h_check][w_check]: #4-2-a 선택한 칸의 색과 동일한지 확인하고, 동일하다면
answer += 1 # answer 에 + 1
return answer # 5. count값 return`
평소 의사코드가 주어진 문제를 접할 기회가 많지 않았기에
의사코드를 코드로 옮기며 문제를 이해하는 과정이 새롭게 느껴졌다.
1년전 쯤,
핀토스 자료의 안내를 읽으며 코드를 따라치던 때보다 지금 이 의사코드를 읽고 코드를 작성하기가 좀 더 수월하다는 생각 마저 든다.
물론 문제의 난이도 차이도 있겠지만 의사코드를 이해하는 능력이 0.01 정도 좋아졌을지도?
정글 1000트 정도 더 돌리면 내가 핀토스 씹어 먹을지도?
