티스토리 뷰

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/81302

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

2021 카카오 채용연계형 인턴십

Level 2 문제다.

 

 

dfs나 bfs로 접근할 수 있지만

나는 배열을 끝까지 탐색하며 응시자인 경우 거리두기를 지켰는지 확인했다.

거리두기를 위반한 경우는 

1. 바로 옆이 응시자인 경우

2. 대각선이 응시자고 대각선 사이에 테이블이 있는 경우

3. 맨해튼 거리 2에 응시자가 있고 그 사이에 테이블이 있는 경우

 

이렇게 세가지기 때문에 세가지 경우에 해당하는 배열을 만들어 확인했다.

class Solution {
    public int[] solution(String[][] places) {
		int[][] beside = {{0, -1}, {-1, 0}, {0, 1}, {1, 0}};
		int[][] diagonal = {{-1, -1}, {-1, 1}, {1, 1}, {1, -1}};
		int[][] far = {{0, -2}, {-2, 0}, {0, 2}, {2, 0}};

		int []result = {1, 1, 1, 1, 1};

		Loop: for(int i=0;i<5;i++) {
			char[][] arr = new char[5][5];
			for(int j=0;j<5;j++)
				for(int k=0;k<5;k++)
					arr[j][k] = places[i][j].charAt(k);

			for(int j=0;j<5;j++)
				for(int k=0;k<5;k++) {
					if(arr[j][k] == 'P') {
						int newX, newY;
						
						// 바로 옆
						for(int l=0;l<4;l++) {
							newX = j + beside[l][0];
							newY = k + beside[l][1];
							if(newX >= 0 && newX < 5 && newY >= 0 && newY < 5 
									&& arr[newX][newY] == 'P') {
								result[i] = 0;
								continue Loop;
							}
						}

						// 대각선
						for(int l=0;l<4;l++) {
							newX = j + diagonal[l][0];
							newY = k + diagonal[l][1];
							if(newX >= 0 && newX < 5 && newY >= 0 && newY < 5 
									&& arr[newX][newY] == 'P' && 
									(arr[j + beside[l][0]][k + beside[l][1]] == 'O' ||
									arr[j + beside[(l + 1) % 4][0]][k + beside[(l + 1) % 4][1]] == 'O')) {
								result[i] = 0;
								continue Loop;
							}
						}

						// 맨해튼 거리 2
						for(int l=0;l<4;l++) {
							newX = j + far[l][0];
							newY = k + far[l][1];
							if(newX >= 0 && newX < 5 && newY >= 0 && newY < 5 
									&& arr[newX][newY] == 'P'
									&& arr[j + beside[l][0]][k + beside[l][1]] == 'O') {
								result[i] = 0;
								continue Loop;
							}
						}
					}
				}
		}

		return result;
    }
}
728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함