코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | O |
본인의 실력으로 풀었는가? | O |
코딩테스트 연습 - 거리두기 확인하기
[["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1]
programmers.co.kr
import java.util.*;
class Solution {
public int[] solution(String[][] places) {
int[] answer = new int[places.length];
//places 길이만큼 반복
for (int i = 0; i < places.length; i++) {
ArrayList<People> arr = new ArrayList<>(); //P점들이 담길 배열
char[][] map = new char[5][5]; //5 * 5 배열
answer[i] = 1; //일단 성공했다고 치고 1 넣어두기
for (int j = 0; j < 5; j++) { //맵 넣는 과정
char[] row = places[i][j].toCharArray();
map[j] = Arrays.copyOf(row, 5);
for (int m = 0; m < 5; m++) { //넣을 값 중에 P가 있으면 배열에 추가
if (row[m] == 'P') {
arr.add(new People(j, m));
}
}
}
//P 포인트들끼리 비교하기
loop:
for (int m = 0; m < arr.size(); m++) {
People p1 = arr.get(m);
int x1 = p1.x;
int y1 = p1.y;
for (int n = 0; n < arr.size(); n++) {
if (m == n) continue;
People p2 = arr.get(n);
int x2 = p2.x;
int y2 = p2.y;
//만약 거리가 2면 func함수로 넘기기
int num = Math.abs(x2 - x1) + Math.abs(y2 - y1);
if (num == 2) {
boolean value = func(map, x1, y1, x2, y2);
if (!value) {
answer[i] = 0;
break loop;
}
} else if (num < 2) { //거리가 2보다 작으면 그냥 바로 false로 실패 리턴
answer[i] = 0;
break loop;
}
}
}
}
return answer;
}
public boolean func(char[][] map, int x1, int y1, int x2, int y2) {
//포인터가 대각선에 있는지
if (x1 != x2 && y1 != y2) {
if (map[x1][y2] == 'O' || map[x2][y1] == 'O') return false;
} else {
if (x1 == x2) { //아니면 x나 y가 동일한지를 비교
if (map[x1][Math.min(y1, y2) + 1] == 'O') return false;
} else if (y1 == y2) {
if (map[Math.min(x1, x2) + 1][y1] == 'O') return false;
}
}
return true;
}
}
class People {
int x, y;
public People(int x, int y) {
this.x = x;
this.y = y;
}
}
테스트 1 〉 | 통과 (0.32ms, 74.3MB) |
테스트 2 〉 | 통과 (0.26ms, 76.4MB) |
테스트 3 〉 | 통과 (0.21ms, 76.7MB) |
테스트 4 〉 | 통과 (0.26ms, 76.2MB) |
테스트 5 〉 | 통과 (0.24ms, 72MB) |
테스트 6 〉 | 통과 (0.28ms, 75.3MB) |
테스트 7 〉 | 통과 (0.36ms, 73.7MB) |
테스트 8 〉 | 통과 (0.32ms, 78.4MB) |
테스트 9 〉 | 통과 (0.25ms, 74.6MB) |
테스트 10 〉 | 통과 (0.30ms, 74.2MB) |
테스트 11 〉 | 통과 (0.23ms, 81.6MB) |
테스트 12 〉 | 통과 (0.32ms, 74MB) |
테스트 13 〉 | 통과 (0.26ms, 76MB) |
테스트 14 〉 | 통과 (0.23ms, 76.2MB) |
테스트 15 〉 | 통과 (0.21ms, 73.2MB) |
테스트 16 〉 | 통과 (0.21ms, 83.4MB) |
테스트 17 〉 | 통과 (1.33ms, 74MB) |
테스트 18 〉 | 통과 (0.24ms, 80MB) |
테스트 19 〉 | 통과 (0.23ms, 69.2MB) |
테스트 20 〉 | 통과 (0.27ms, 65.9MB) |
테스트 21 〉 | 통과 (0.34ms, 72.8MB) |
테스트 22 〉 | 통과 (0.34ms, 76.1MB) |
테스트 23 〉 | 통과 (0.06ms, 73.6MB) |
테스트 24 〉 | 통과 (0.30ms, 78.6MB) |
테스트 25 〉 | 통과 (0.06ms, 75.5MB) |
테스트 26 〉 | 통과 (0.06ms, 76.6MB) |
테스트 27 〉 | 통과 (0.27ms, 72.1MB) |
테스트 28 〉 | 통과 (0.22ms, 77.6MB) |
테스트 29 〉 | 통과 (0.36ms, 77.7MB) |
테스트 30 〉 | 통과 (0.21ms, 74.9MB) |
테스트 31 〉 | 통과 (0.21ms, 77.1MB) |
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 - 튜플 (2단계) (0) | 2022.05.03 |
---|---|
[Java] 프로그래머스 - 수식 최대화 (2단계) (0) | 2022.05.02 |
[Java] 프로그래머스 - 1차 뉴스 클러스터링 (2단계) (0) | 2022.04.29 |
[Java] 프로그래머스 - 실패율 (1단계) (0) | 2022.04.28 |
[Java] 프로그래머스 - 괄호 변환 (2단계) (0) | 2022.04.28 |