문제
https://school.programmers.co.kr/learn/courses/30/lessons/120876
포인트
- 연속된 숫자로 구간을 표현할 때, 끝점은 포함하지 않아도 됨
풀이
class Solution {
public int solution(int[][] lines) {
int[] arr = new int[200];
int answer = 0;
for (int i = 0; i < lines.length; i++) {
for (int j = lines[i][0] + 100; j < lines[i][1] + 100; j++) {
arr[j]++;
}
}
for (int i = 0; i < 200; i++) {
if (arr[i] > 1) {
answer++;
}
}
return answer;
}
}
import java.util.*;
class Solution {
public int solution(int[][] lines) {
Map<Integer, Integer> map = new HashMap<>();
for (int[] line : lines) {
int from = Math.min(line[0], line[1]); //그냥 line[0] 해도 됨
int to = Math.max(line[0], line[1]); //그냥 line[1] 해도 됨
for (int i = from; i < to; i++) {
map.merge(i, 1, Integer::sum);
}
}
return (int) map.values().stream().filter(i -> i > 1).count();
}
}
BiFunction<oldValue, newValue, result>
map.merge(key, value, BiFunction<oldValue, newValue, result>)
- 기존에 값이 있으면 (oldValue + newValue)를 수행 (즉, Integer::sum → 기존 값에 1을 더함)
- 기존에 값이 없으면 newValue(즉, 1)을 저장
class Solution {
public int solution(int[][] lines) {
int answer = 0;
for (int i = -100; i < 100; i++) {
int count = 0;
// 모든 선분을 확인하여 겹치는 개수 카운트
for (int[] line : lines) {
if (line[0] <= i && line[1] > i) {
count++;
}
}
// 두 개 이상 겹치는 경우 answer 증가
if (count > 1) answer++;
}
return answer;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Lv.0 / 유한소수 판별하기 / Java (0) | 2025.02.26 |
---|---|
[Programmers] Lv.0 / 특이한 정렬 / Java (0) | 2025.02.11 |
[Programmers] Lv.0 / 등수 매기기 / Java (0) | 2024.07.25 |
[Programmers] Lv.0 / 로그인 성공? / Java (0) | 2024.07.25 |
[Programmers] Lv.0 / 치킨 쿠폰 / Java (0) | 2024.07.23 |
댓글