-
[TIL] 안전지대 찾기 알고리즘TIL(Today I Learned) 2022. 12. 13. 23:17
*20221213의 회고
오늘은 프로그래머스에서 입문 레벨 중 정답률이 낮은 문제를 풀었다. 풀지 못한 스터디원들이 많았는데, 나도 인프런에서 코테 인강을 들으면서 비슷한 문제를 푼 경험 덕분에 이 문제를 풀 수 있었다. 처음에는 어떤식으로 접근해야할지 갈피도 못잡았던 기억이 난다. 그래서 느낀건 또 뭐냐면, 현재 내가 공부를 제대로 하고 있는지, 이 부분을 공부하는게 맞는건지 하면서 막연한 느낌이 있었는데, 결국엔 언젠가는 피가되고 살이 된다는 생각을 했다. 그러니 묵묵히 해내야 한다. 아래는 오늘 푼 프로그래머스 입문 레벨 '안전지대' 문제 정답코드이다.
https://school.programmers.co.kr/learn/courses/30/lessons/120866
public class SafeZone { //프로그래머스 코딩테스트 입문 <안전지대> public int solution(int[][] board) { int answer = 0; int n = board.length; int[] dx = {-1, 0, 1}; int[] dy = {-1, 0, 1}; int[][] extendBoard = new int[n+2][n+2]; //board 의 가장자리를 0으로 씌운 extendBoard 생성 for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(board[i][j] == 1) { extendBoard[i + 1 + dx[0]][j + 1 + dy[0]] = 1; extendBoard[i + 1 + dx[0]][j + 1 + dy[1]] = 1; extendBoard[i + 1 + dx[0]][j + 1 + dy[2]] = 1; extendBoard[i + 1 + dx[1]][j + 1 + dy[0]] = 1; extendBoard[i + 1 + dx[1]][j + 1 + dy[1]] = 1; extendBoard[i + 1 + dx[1]][j + 1 + dy[2]] = 1; extendBoard[i + 1 + dx[2]][j + 1 + dy[0]] = 1; extendBoard[i + 1 + dx[2]][j + 1 + dy[1]] = 1; extendBoard[i + 1 + dx[2]][j + 1 + dy[2]] = 1; } } } //위험 지역을 1로 표시 for(int i = 1; i < extendBoard.length-1; i++) { for(int j = 1; j < extendBoard.length-1; j++) { if(extendBoard[i][j] == 0) { answer++; } } } //안전지대 수를 카운트 return answer; } public static void main(String[] args) { SafeZone safeZone = new SafeZone(); int[][] board = {{0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}; System.out.println(safeZone.solution(board)); } }
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] JPA 어노테이션 (0) 2022.12.15 [TIL] Spring과 Lombok의 Annotation (0) 2022.12.14 [TIL] Entity, DTO, 영속성 컨텍스트 (0) 2022.12.12 [TIL] 코딩테스트 문제풀이 스터디 (0) 2022.12.09 [TIL] SpringBoot로 블로그 백앤드 서버 만들기 (0) 2022.12.08