반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 벤쿠버렌트
- 파이도 환불
- 부산입국
- Lesson2
- Java
- 벤쿠버집구하기
- 언마운트
- 백준알고리즘
- FIDO 환불
- Lesson3
- 데이터의 무결성
- QA엔지니어
- 캐나다워홀
- Linux
- FLEX5
- FK 설정
- 외래키설정
- BC렌트
- 엔테크서비스
- 레노보노트북
- IntelliJ
- 설탕문제
- 1463번
- database연결
- 프로그래머스
- binaray_gap
- 자바
- 벤쿠버 렌트
- codility
- 리눅스
Archives
- Today
- Total
대충이라도 하자
프로그래머스 - 거리두기 확인하기 본문
반응형
1. 처음에는 BFS를 사용할 방법을 생각하지 않았다.
어차피 5*5라는 크기가 정해져있어서 효율성에 대해서 생각하지 않았는데 아니나 다를까
정확성만 체크하는 문제인 듯하다. 하지만... 빼먹은 케이스가 있는지 90점이 나왔다.
또!!! 중요하게 봐야할 점이 있다. array out of index 오류가 발생하지 않도록 조건을 넣어줄 때,
무조건 변수의 범위는 if문에서 맨 앞에 위치시켜야 먼저 확인을 하고 그 다음 걸 확인할 수 있다.
만약에 if 문 후반부에 이 조건이 있으면 앞부분 array 확인 시, 오류가 발생해버림
이걸 찾지 못해서...ㅜㅜ
class Solution {
static int[] answer;
public int[] solution(String[][] places) {
answer = new int[5];
for(int i = 0;i<5;i++){
char [][] room = new char[5][5];
for(int j = 0;j<5;j++) {
room[j]=places[i][j].toCharArray();
}
distance(room, i);
}
return answer;
}
private void distance( char [][] room , int index) {
for(int i = 0; i<5;i++){
for(int j =0; j<5;j++){
if(room[i][j] == 'P'){
//오른쪽, 왼쪽, 위, 아래 확인
if( (i<4 &&room[i+1][j] =='P') || (i>0 &&room[i-1][j] =='P') ||
(j<4 &&room[i][j+1] == 'P') || (j>0&&room[i][j-1] =='P' ) ){
answer[index] = 0;
return;
}
//+2칸째
if( (i<3 &&room[i+2][j] =='P' && room[i+1][j] !='X') ||
(i>1 &&room[i-2][j] =='P' && room[i-1][j] !='X') ||
(j<3 &&room[i][j+2] == 'P'&& room[i][j+1] != 'X') ||
(j>1 && room[i][j-2] =='P' && room[i][j-1] !='X' ) ){
answer[index] = 0;
return;
}
//대각선 확인
if(i>0 && j>0 && room[i-1][j-1] =='P'){
if((i>0 && room[i-1][j] !='X') && (j>0 && room[i][j-1] !='X')){
answer[index]=0;
return;
}
}
if(i>0 && j<4 && room[i-1][j+1] =='P'){
if( (i>0 && room[i-1][j] !='X' )&&( j<4 &&room[i][j+1] !='X')){
answer[index]=0;
return;
}
}
if(i<4 && j<4 && room[i+1][j+1] == 'P' ){
if( (i<4 && room[i+1][j] !='X')&& (j<4 && room[i][j+1] !='X')){
answer[index]=0;
return;
}
}
if(i<4 && j>0 && room[i+1][j-1] =='P') {
if((i<4 && room[i+1][j] !='X' )&&(j>0 && room[i][j-1] !='X' )){
answer[index]=0;
return;
}
}
}
}
}
answer[index] =1;
}//private
}
테스트 1 〉 | 통과 (0.04ms, 76.2MB) |
테스트 2 〉 | 통과 (0.04ms, 76.3MB) |
테스트 3 〉 | 통과 (0.04ms, 80.6MB) |
테스트 4 〉 | 통과 (0.04ms, 81.3MB) |
테스트 5 〉 | 실패 (0.07ms, 76MB) |
테스트 6 〉 | 통과 (0.07ms, 74.1MB) |
테스트 7 〉 | 통과 (0.06ms, 75MB) |
테스트 8 〉 | 통과 (0.05ms, 75.2MB) |
테스트 9 〉 | 통과 (0.06ms, 75.4MB) |
테스트 10 〉 | 통과 (0.04ms, 76.6MB) |
테스트 11 〉 | 실패 (0.04ms, 79MB) |
테스트 12 〉 | 통과 (0.06ms, 67.6MB) |
테스트 13 〉 | 통과 (0.05ms, 75.5MB) |
테스트 14 〉 | 통과 (0.04ms, 73.2MB) |
테스트 15 〉 | 통과 (0.04ms, 76.6MB) |
테스트 16 〉 | 실패 (0.04ms, 76MB) |
테스트 17 〉 | 통과 (0.04ms, 74.5MB) |
테스트 18 〉 | 통과 (0.04ms, 75.2MB) |
테스트 19 〉 | 통과 (0.04ms, 77.6MB) |
테스트 20 〉 | 통과 (0.04ms, 68.6MB) |
테스트 21 〉 | 통과 (0.06ms, 74.5MB) |
테스트 22 〉 | 통과 (0.05ms, 74.6MB) |
테스트 23 〉 | 통과 (0.06ms, 75.6MB) |
테스트 24 〉 | 통과 (0.04ms, 78.1MB) |
테스트 25 〉 | 통과 (0.04ms, 77MB) |
테스트 26 〉 | 통과 (0.03ms, 68.5MB) |
테스트 27 〉 | 통과 (0.04ms, 76.6MB) |
테스트 28 〉 | 통과 (0.05ms, 76.5MB) |
테스트 29 〉 | 통과 (0.06ms, 73.9MB) |
테스트 30 〉 | 통과 (0.04ms, 82.8MB) |
2. 갑자기 불현듯 깨달았다. 뭘 실수했는짘ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
내가 실수한 부분은 대각선 확인하는 부분에서 둘 중 하나가 'X'가 아니면 거짓인데
무조건 2가지 경우 다 'X'가 아닌 경우만 거짓이도록 출력을 설정....ㅜㅜㅜ
그래서 && 부분을 ||로 고쳐주었다. 이런 거 헷갈리지 않도록 조심하자
class Solution {
static int[] answer;
public int[] solution(String[][] places) {
answer = new int[5];
for(int i = 0;i<5;i++){
char [][] room = new char[5][5];
for(int j = 0;j<5;j++) {
room[j]=places[i][j].toCharArray();
}
distance(room, i);
}
return answer;
}
private void distance( char [][] room , int index) {
for(int i = 0; i<5;i++){
for(int j =0; j<5;j++){
if(room[i][j] == 'P'){
//오른쪽, 왼쪽, 위, 아래 확인
if( (i<4 &&room[i+1][j] =='P') || (i>0 &&room[i-1][j] =='P') ||
(j<4 &&room[i][j+1] == 'P') || (j>0&&room[i][j-1] =='P' ) ){
answer[index] = 0;
return;
}
//+2칸째
if( (i<3 &&room[i+2][j] =='P' && room[i+1][j] !='X') ||
(i>1 &&room[i-2][j] =='P' && room[i-1][j] !='X') ||
(j<3 &&room[i][j+2] == 'P'&& room[i][j+1] != 'X') ||
(j>1 && room[i][j-2] =='P' && room[i][j-1] !='X' ) ){
answer[index] = 0;
return;
}
//대각선 확인
if(i>0 && j>0 && room[i-1][j-1] =='P'){
if((i>0 && room[i-1][j] !='X') || (j>0 && room[i][j-1] !='X')){
answer[index]=0;
return;
}
}
if(i>0 && j<4 && room[i-1][j+1] =='P'){
if( (i>0 && room[i-1][j] !='X' )||( j<4 &&room[i][j+1] !='X')){
answer[index]=0;
return;
}
}
if(i<4 && j<4 && room[i+1][j+1] == 'P' ){
if( (i<4 && room[i+1][j] !='X')|| (j<4 && room[i][j+1] !='X')){
answer[index]=0;
return;
}
}
if(i<4 && j>0 && room[i+1][j-1] =='P') {
if((i<4 && room[i+1][j] !='X' )||(j>0 && room[i][j-1] !='X' )){
answer[index]=0;
return;
}
}
}
}
}
answer[index] =1;
}//private
}
BFS방법으로도 한 번 풀어봐야 할 듯!
반응형
'꼬꼬마 개발자 노트 > Coding Problems' 카테고리의 다른 글
Arrays -chapter1 (0) | 2022.01.10 |
---|---|
프로그래머스-[1차] 추석 트래픽 (0) | 2022.01.06 |
프로그래머스-멀쩡한 사각형 (0) | 2022.01.04 |
프로그래머스 - 오픈채팅방 (2019 KAKAO BLIND RECUITMENT) (0) | 2022.01.03 |
프로그래머스 2020 kakao blind recruitment 문자열 (0) | 2021.10.21 |
Comments