https://school.programmers.co.kr/learn/courses/30/lessons/120876
시도 1)
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public int solution(int[][] lines) {
int answer = 0;
ArrayList<Integer> overlap = new ArrayList<>();
for(int i=0; i<lines.length; i++)
{
for(int j=i+1; j<lines.length; j++)
{
if(lines[i][1]>lines[j][0])
{
overlap.add(lines[i][1]-lines[j][0]);
}
}
}
if(overlap.size()==0)
{
answer = 0;
}
else
{
answer = Collections.max(overlap);
}
return answer;
}
}
겹치는 선분의 길이(Lv0) - 자바 Java 프로그래머스 문제 풀이 (youtube.com)
- 몇 개의 선분이 겹쳐 있는지 개수 표현
- 입력값이 -100~100인데 음수 표현 못하니까 100을 더해서 양수로 표현 ( 0~200)
- 배열을 쭉 훑으면서 값이 1 초과하는 것들의 개수를 세어주면 됨
1) arr 배열 및 변수 초기화
2) lines 정보를 arr 배열에 적용
3) arr 배열에서 겹친 부분 세기
정답
class Solution {
public int solution(int[][] lines) {
int answer = 0;
//1. arr 배열 및 변수 초기화
int arr[] = new int[200];
//2. lines 정보를 arr배열에 적용
for(int i=0; i<lines.length; i++)
{
for(int j=lines[i][0]+100; j<lines[i][1]+100; j++)
{
arr[j]++;
}
}
//3. arr 배열에서 겹친 부분 세기
for(int i=0; i<200; i++)
{
if(arr[i]>1)
answer++;
}
return answer;
}
}
다른 사람의 풀이
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(int[][] lines) {
Map<Integer, Integer> map = new HashMap<>();
for (int i=0; i<lines.length; i++) {
int min = Math.min(lines[i][0], lines[i][1]);
int max = Math.max(lines[i][0], lines[i][1]);
for (int j=min; j<max; j++) {
map.put(j, map.getOrDefault(j, 0) + 1);
}
}
int answer = 0;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (entry.getValue() >= 2) {
answer++;
}
}
return answer;
}
}
'Java > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 - 특이한 정렬 (0) | 2024.05.11 |
---|---|
[JAVA] 프로그래머스 - 유한소수 판별하기 (0) | 2024.05.11 |
[JAVA] 프로그래머스 - 평행 (0) | 2024.05.11 |
[JAVA] 프로그래머스 - 저주의 숫자 3 (0) | 2024.05.11 |
[JAVA] 프로그래머스 - 외계어 사전 (0) | 2024.05.10 |