반응형
📖 문제
https://school.programmers.co.kr/learn/courses/30/lessons/134239
💡 풀이 방식
• 정적
1. 구간 별 그래프의 높이를 저장한다.
2. ranges 배열을 돌면서 해당 구간의 x좌표가 유효한지 판별한다.
3. 2에서 x좌표가 유효하다면, 구간 별 면적을 산출해 계산한다.
구간 별 면적 구하는 공식
: (윗변+아랫변) * 높이 / 2
🔺 코드
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
29
30
31
32
33
34
35
36
37
38
39
40
|
import java.util.*;
class Solution {
public double[] solution(int k, int[][] ranges) {
double[] answer = new double[ranges.length];
List<Integer> list = new ArrayList<>(); // 구간별 그래프 높이 저장용 리스트
while(k > 1) {
list.add(k);
if(k % 2 == 0)
k/=2;
else
k = k*3 + 1;
}
list.add(k);
for(int i = 0 ; i < ranges.length ; i++) {
// 유효한지 판별하기
if(ranges[i][0] > ranges[i][1] + list.size() - 1) { // 시작값이 끝값보다 큰 경우
answer[i] = -1;
continue;
}
else if(ranges[i][0] == ranges[i][1] + list.size() - 1) {
answer[i] = 0;
continue;
}
// 구간별 면적 산출 후 더하기 (시작 범위부터 x를 1씩 증가시키며)
// [공식] (윗변+아랫변) * 높이 / 2
double area = 0;
for(int j = ranges[i][0] ; j < ranges[i][1] + list.size() - 1 ; j++) {
area += (list.get(j) + list.get(j+1)) / 2.0;
}
answer[i] = area;
}
return answer;
}
}
|
cs |
💦 어려웠던 점
- 구간 별 면적을 어떻게 구해야 할지 공식을 잊고 있었다.
🧐 새로 알게 된 내용
- 리스트에 순서대로 저장되니까 ranges의 범위를 돌면서 리스트의 값을 2개 가져와 해당 구간의 넓이를 구하면 되는 것이었다..
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level3] 표 편집 (JAVA) (2) | 2024.07.24 |
---|---|
[프로그래머스/Level1] 신고 결과 받기 (JAVA) (0) | 2024.07.18 |
[프로그래머스/Level2] 교점에 별 만들기 (JAVA) (0) | 2024.06.11 |
[프로그래머스/Level3] 부대 복귀 (JAVA) (2) | 2024.06.08 |
[프로그래머스/Level1] [PCCE 기출문제] 10번 / 데이터 분석 (JAVA) (0) | 2024.05.16 |