문제
https://school.programmers.co.kr/learn/courses/30/lessons/120876
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답
class Solution {
public int solution(int[][] lines) {
int[] passPoint = new int[202];
int answer=0;
for(int i=0;i<lines.length;i++){
int start = lines[i][0]+100;
int end = lines[i][1]+100;
for(int j=start;j<=end;j++){
passPoint[j]++;
}
}
for(int i=0;i<=201;i++){
if(passPoint[i]>1 && passPoint[i+1]>1) {
answer++;
if(i-100 == lines[0][1] && i-99 == lines[1][0])answer--;
if(i-100 == lines[0][1] && i-99 == lines[2][0])answer--;
if(i-100 == lines[1][1] && i-99 == lines[2][0])answer--;
}
}
return answer;
}
}
선분들이 지난 점들 모두 +100하여 담은 배열을 이용해 앞의 점과 그 뒤의 점이 지난 횟수가 1초과라면 선분의 길이를 1 늘려주었다.
그리고 예외처리를 하였다. 그에 대한 설명은 아래에
오답과 고찰
마지막 for문에서 예외처리를 하지 않을 경우 문제가 발생했다.
테스트케이스에서 실패가 뜬것을 보면 로직상 문제가 있는 것이다.
이 상황을 살펴보면 예외의 이유를 알 수 있다.
-1도 지나는 선이 2개, 0도 지나는선이 2개이다. 위의 조건에 맞으나, 그 사이는 한개의 직선만 지나게 된다.
이러한 빈틈이 발생 하는 상황은 앞의 점이 누군가의 마지막, 뒤의 점이 누군가의 끝 일때 발생하게 되어 for문에 그러한 상황을 막는 예외처리를 했더니 정답이 되었다.
'Coding Test > JAVA 코딩테스트 풀이정리(프로그래머스)' 카테고리의 다른 글
프로그래머스 스쿨 Lv.1 - 개인정보 수집 유효기간 (2023 KAKAO BLIND RECRUITMENT) (String 타입으로 주어진 날짜) (0) | 2023.12.27 |
---|---|
프로그래머스 스쿨 Lv.1 - 푸드 파이트 대회(String Builder 연습) (0) | 2023.12.27 |
프로그래머스 스쿨 Lv.1 - 숫자 짝꿍(string 시간복잡도) (1) | 2023.12.21 |
프로그래머스 스쿨 Lv.1 - 기사단원의 무기(약수의개수 구하기) (0) | 2023.12.19 |
프로그래머스 스쿨 Lv.1 - 덧칠하기 (0) | 2023.12.19 |