프로그래머스 캠핑 자바

최태민·2023년 8월 15일
0

⚒️알고리즘

목록 보기
1/5

문제

캠핑

풀이과정

  1. 정렬
    1-1.x축 기준으로 오름차순 정렬
    1-2. x축이 같으면 y축 기준으로 오름차순 정렬

  2. 텐트만들기
    2-1. 첫번째 for문은 하나의 쐐기
    2-2. 두번째 for문도 다른하나의 쐐기
    2-3. 두 쐐기의 넓이가 0인지 확인
    2-4. 세번째 for문은 텐트안의 다른 쐐기가 있는지 비교

문제의 2-4가 핵심인거 같다 처음에는 x축 정렬으로 인해 x축 비교 없이 현재 쐐기를 받은 가장 작은 y축과 가장 큰 y축 안에 다른 쐐기가 없으면 된다고 생각하고 틀렸다ㅜㅜ.
하지만 생각을 해보니 x축도 y축과 같이 비교하여 텐트안에 쐐기가 있는지 확인이 필요했다.

다른 테스트코드

n = 3, param2 = [[0, 0], [0, 2], [4, 3]] 답: 2
n = 4, param2 = [[0, 0], [0, 2], [4, 3], [5, 1]] 답: 5
n = 4, param2 = [[0, 0], [0, 2], [4, 2], [5, 1]] 답: 4

⛳ 내가 작성한 코드

import java.util.*;

class Solution {
public int solution(int n, int[][] data) {

	// 1. 정렬
    Arrays.sort(data,(o1,o2)->{
		if(o1[0]==o2[0]) return o1[1]-o2[1];
		return o1[0]-o2[0];
	});
    
	int ans = 0;
    //2. 사용할수 있는 쐐기 구하기
    //2-1. 첫번째 쐐기
	for(int i=0; i<data.length; i++) {
    
		//2.2 두번째 쐐기
		for(int j=i+1; j<data.length; j++) {
       		//2-3. 넓이가 0인지 확인
			if(data[i][0] == data[j][0] || data[i][1]==data[j][1]) continue;
			
            //2-4. 텐트안에 쐐기가 없는지 확인
			boolean check = true;
			for(int k=i+1; k<j; k++) {
				if((data[i][0]<data[k][0] &&
                data[k][0] <data[j][0]) &&
                Math.min(data[i][1], data[j][1])< data[k][1] && 
                Math.max(data[i][1], data[j][1]) > data[k][1]) {
					check= false;
					break;
				}
			}
			if(check) {
				ans++;
			}
			
			
		}
	}
	return ans;

}
profile
백엔드 개발자 꿈나무

1개의 댓글

comment-user-thumbnail
2023년 8월 15일

정보에 감사드립니다.

답글 달기